按文件名排序查找命令

时间:2018-01-22 15:27:06

标签: linux find alphabetical

我希望仅按文件名而不是整个路径按字母顺序对find命令的输出进行排序。

说我有一堆文本文件:

./d/meanwhile/in/b.txt
./meanwhile/c.txt
./z/path/with/more/a.txt
./d/mored/dddd/d.txt

我正在寻找输出:

./z/path/with/more/a.txt
./d/meanwhile/in/b.txt
./meanwhile/c.txt
./d/mored/dddd/d.txt

我试过了:

find . -type f -name '*.txt' -print0 | sort -t
find . -name '*.txt' -exec ls -ltu {} \; | sort -n
find . -name '*.txt' | sort -n

......以及其他排列。

1 个答案:

答案 0 :(得分:2)

直接的方法是将每个文件(记录)打印在两列中 - 文件名和路径 - 由某些字符分隔,确保永远不会出现在文件名中(-printf '%f\t%p\n'),然后先对输出进行排序仅列(sort -k1),然后删除第一列(cut -d$'\t' -f2):

find . -type f -name '*.txt' -printf '%f\t%p\n' | sort -k1 | cut -d$'\t' -f2

请注意,我们在这里使用\t(制表符)和\n(换行符)作为字段和记录分隔符,假设它们不会显示为任何文件名的一部分。