在Bash中按数字文件名排序的文本文件 [英] erge text files ordered by numerical filenames in Bash
问题描述
有没有办法用一个bash命令按文件名的数字顺序连接多个文本文件?
Is there any way to concatenate multiple text files in numerical order of the file names with one bash command ?
我尝试了此操作,但是由于某些原因,前三行的顺序不正确
I tried this, but for some reason, the first three lines are not in order
sort -n *txt > all.txt
推荐答案
添加此答案,只是因为当前接受的答案建议不良做法. &将来,Hellmar可能会遇到完全相同的问题我遇到过一次.:
Adding this answer, only because the currently accepted answer suggests a bad practice. & In future, Hellmar may land in exact same problem I faced once. : Cannot delete an accepted answer.
无论如何,这应该是安全的答案:
Anyway, this should be the safe answer:
printf "%s\0" *txt | sort -zn | xargs -0 cat > all.txt
在这里,整个管道的文件名都以NULL字符分隔. NULL字符仅是不能作为文件名一部分的字符.
Here, entire pipeline has file names delimited by a NULL character. A NULL character is only character that cannot be part of file name.
此外,如果所有文件名都具有相同的结构(例如file0001.txt,file0002.txt等),则此代码应同样有效:
Also, if all the filenames have same structure, (say file0001.txt, file0002.txt etc), then this code should work just as good:
cat file[0-9][0-9][0-9][0-9].txt > all.txt
这篇关于在Bash中按数字文件名排序的文本文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!