如何对文件列表进行排序并在bash中连接内容?

时间:2016-10-07 16:33:32

标签: linux bash sorting sed concatenation

这有效:

find . -name "*.1" -print0 | xargs -0 cat > list.txt

但是当我尝试对文件名进行排序时,删除换行符,管道传输给cat的文件名列表看起来与之前相同但已排序:

find . -name "*.1" | sort | sed ':a;N;$!ba;s/\n//g' | xargs -0 cat > list.txt

但是,cat会返回此错误:

: No such file or directory

2 个答案:

答案 0 :(得分:2)

您的xargs语句需要空终止条目。

find . -name '*.1' | sort | tr '\n' ' ' | xargs cat > list.txt

如果你的文件名或目录有空格,那么是的,使用空终止方式。

答案 1 :(得分:1)

一直使用nul终结符:

find . -name "*.1" -print0 | sort -z | xargs -0 cat > list.txt

您的尝试失败了,因为您刚刚删除了所有换行符(有效地连接了所有文件名)。这在终端中呈现与NUL分隔的文件名相同的方式,但不会以相同的方式工作。