Linux Shell 命令: Find. 如何在不使用管道的情况下排序和执行?

标签 linux find

带参数 exec 的 Linux 命令 find 可以很好地在文件/文件夹上执行命令,无论它们是否包含空格和特殊字符。例如:

find . -type f -exec md5sum {} \;

非常适合在目录树中的每个文件上运行md5sum,但以随机顺序执行。 Find 不会对结果进行排序,并且需要通过管道进行 sort 以获得更易于理解的排序结果。但是,通过管道传输到 sort 消除了 exec 的优势。

这不起作用:

find . -type f | sort | md5sum

因为有些文件名包含空格和特殊字符。

也不起作用:

find . -type f | sort | sed 's/ /\\ /g' | md5sum

仍然无法识别文件名中包含空格。

我想我总是可以稍后对最终结果进行排序,但想知道是否有人知道通过在 find 中排序来避免额外步骤的简单方法?

最佳答案

使用 BSD 查找

-s 参数可用于请求字典排序顺序。

find . -s -type f -exec md5sum -- '{}' +

使用 GNU 查找

使用 NUL 分隔符可以明确地处理文件名。假设您有 GNU 工具:

find . -type f -print0 | sort -z | xargs -0 md5sum

关于Linux Shell 命令: Find. 如何在不使用管道的情况下排序和执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40321995/

相关文章:

linux - NodeJS 脚本无法在 Windows 或 Linux 上运行

python - 以随机顺序在包含特定字母的列表中搜索字符串

windows - 使用批量输入查找和替换值列表

regex - linux + 不规则表达式查找机制(查找命令)或 perl

linux - 如何在不使用 Intellij 的情况下在 Linux centos 中运行 cucumber 测试用例

Linux:如何设置 gdb 和可执行文件之间的关联?

linux - 在没有容器的情况下运行容器的 ELF 文件

linux - 从内核模块向用户空间发送实时信号失败

bash - 使用 find 和 sed 递归重命名文件

c++ - 如何根据类属性在 vector 中找到对象?