我正在编写一个小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>
答案 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。