bash:合并由数字文件名sorting的文本文件

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

我试过这个,但是由于某种原因,前三行不合适

sort -n *txt > all.txt 

添加这个答案,只是因为目前接受的答案表明一个不好的做法 。 未来,Hellmar可能会遇到同样的问题, 我面临过一次。 : 无法删除接受的答案。

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

 printf "%s\0" *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 
 ls *txt | sort -n | xargs cat > all.txt 

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

更新anishsane的答案。

 printf "%s\0" *txt | sort -k1.thecharlocation -zn | xargs -0 cat > all.txt 

thecharlocation是您要排序的第一个键。 如果您的文件名是file01.txt ,则thecharlocation5

在这个问题上参见Nate的另一个类似的答案。