我希望仅按文件名而不是整个路径按字母顺序对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
......以及其他排列。
答案 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
(换行符)作为字段和记录分隔符,假设它们不会显示为任何文件名的一部分。