【发布时间】:2018-01-13 16:10:24
【问题描述】:
我正在编写一个小的 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
【问题讨论】:
-
顺便说一句——用
for读取find的输出是错误的;它与BashPitfalls #1 属于同一类。 -
至于“为什么没有排序?” - 因为排序需要时间,而且当用户没有明确请求时,没有必要花费时间(除非文件系统的索引方式是它可以免费返回目录条目 - 但这是一个问题您使用哪个文件系统格式化您的驱动器,它配置了哪些标志等)。
-
@CharlesDuffy 非常感谢你指出这一点......那么有没有办法可以实现我想要的。