linux - 如何按路径对linux find命令进行排序

标签 linux bash shell sh

我正在写一个小的 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/

相关文章:

linux - 在 ansible - 角色配置文件中使用参数化角色

在读取模式下使用 fopen 检查文件是否存在不会给出 .或/文件名

bash - grep count 搜索多个单词

linux - 在shell脚本中迭代打印特定格式的文件数

linux - 从 shell 脚本中查找进程 ID 的问题

Linux 参数脚本

java - 使用 syslog appender 和 RFC5424 的 Log4j2

linux - 递归查找目录并在 Shell 脚本中重命名

regex - sed 不使用变量

linux - Bash:一个 IF 语句返回了意想不到的值,你能找到原因吗?