如何通过路径对linux find命令进行排序

时间:2018-01-13 16:10:25

标签: linux bash shell sh

我正在编写一个小shell脚本。我想以递归方式获取所有文件路径。因为我使用波纹管代码。

./rename.sh
./1.png
./test/1.png
./test/2.jpg
./test/3.jpg
./2.jpg
./3.jpg

递归获取文件是可以的。但它没有按路径排序。

例如:该文件夹有1,2,3,rename.sh(shell脚本)文件和一个名为test的文件夹。在那个测试文件夹里面又有1,2,3个文件。当我执行此代码时,输​​出就像这样

./rename.sh
./1.png
./2.jpg
./3.jpg
./test/1.png
./test/2.jpg
./test/3.jpg

为什么它没有按路径排序。我如何按路径对其进行排序,以便输出结果为

<ul class="filter-nav"></ul>

1 个答案:

答案 0 :(得分:3)

如果您想要对内容进行排序,自己动手。对于文件列表,安全地执行此操作意味着NUL分隔名称(因此名称中带有换行符的文件不会被读取为两个单独文件的名称,因此在排序过程中会分开),以及使用sort -z(GNU扩展名)。

while IFS= read -r -d '' entry; do
  printf 'Processing: %s\n' "$entry"
done < <(find . -type f -print0 | sort -z)

有关可靠地使用find的指导,请参阅Using Find,有关此处使用的while read构造的讨论,请参见BashFAQ #1