生成按 Bash 中的数字文件名排序的文本文件

erge text files ordered by numerical filenames in Bash

有没有办法用一个 bash 命令按文件名的数字顺序连接多个文本文件?

我试过了,但是不知为什么,前三行顺序不对

sort -n *txt > all.txt
ls *txt | sort -n | xargs cat > all.txt

这会获取所有文件名的列表并对其进行排序,然后使用 xargs 从 cat 和排序后的列表构建命令行。

添加这个答案,只是因为 suggests a bad practice. & In future, Hellmar may land in exact same problem I faced once. : Cannot delete an accepted answer.

无论如何,这应该是安全的答案:

printf "%s[=10=]" *txt | sort -zn | xargs -0 cat > all.txt

此处,整个管道的文件名由 NULL 字符分隔。 NULL 字符是唯一不能作为文件名一部分的字符。

此外,如果所有文件名都具有相同的结构(比如 file0001.txt、file0002.txt 等),那么这段代码应该同样有效:

cat file[0-9][0-9][0-9][0-9].txt > all.txt

更新 anishsane 的回答。

printf "%s[=10=]" *txt | sort -k1.thecharlocation -zn | xargs -0 cat > all.txt

thecharlocation 是您要排序的第一个键。如果你的文件名是file01.txtthecharlocation就是5.

另请参阅 Nate 在此 question 中的另一个类似回答。