我正在写一个小的 shell 脚本。我想递归地获取文件的所有路径。为此,我正在使用波纹管代码。
for entry in `find . -type f`; do
echo $entry
done
递归获取文件是可以的。但它不按路径排序。
ex :该文件夹有 1,2,3,rename.sh(shell 脚本)文件和一个名为 test 的文件夹。在该测试文件夹中再次有 1,2,3 个文件。当我执行这段代码时,输出是这样的
./rename.sh
./1.png
./test/1.png
./test/2.jpg
./test/3.jpg
./2.jpg
./3.jpg
为什么不按路径排序。我如何按路径对它进行排序,以便输出将是
./rename.sh
./1.png
./2.jpg
./3.jpg
./test/1.png
./test/2.jpg
./test/3.jpg
最佳答案
如果您想要对内容进行排序,自己动手。对于文件列表,这样做安全意味着用 NUL 分隔名称(因此名称中带有换行符的文件不会被读取为两个单独文件的名称,因此在排序过程中分开),并使用 sort -z
(GNU 扩展)。
while IFS= read -r -d '' entry; do
printf 'Processing: %s\n' "$entry"
done < <(find . -type f -print0 | sort -z)
参见 Using Find可靠地使用 find
的指南,以及 BashFAQ #1用于讨论此处使用的 while read
构造。
关于linux - 如何按路径对linux find命令进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48241663/