如何使用 find 命令查找所有包含嵌入式 crc32 的文件,例如 Mydocument190_[F285E17D].pdf
澄清一下,crc32 始终在括号内 [F285E17D],文件名可以包含大写、小写字母和数字
进一步澄清 crc32 在文件名中,目的是将结果传送到另一个命令进行验证(很多文件中只有一些包含前面提到的 crc32)
答案1
我同意 Ahmed 的很多观点(使用find
,使用正则表达式,使用posix-extended
-mode),但对于实现,存在一些问题:
find
具有不区分大小写的-iregex
模式,通过不需要指定A-Z
以及a-z
- 说到这里,CRC 是十六进制字符串。我们只需要
[0-F]
……我认为我们可以将其指定为单个范围。如果它不起作用,请使用[0-9a-f]
- 我们需要检查方括号(否则它只会匹配任何 8 个字符的字符串)。
-regex
并-iregex
搜索整个路径。我们需要确保您的字符串不在目录名称中,因此我们会排除 CRC 后的任何斜线。
这是我目前的最大努力:
find -regextype posix-extended -iregex '.*\[[0-f]{8}\][^/]*'
这也将允许无扩展名的文件。
答案2
您应该使用参数
-regex
使用 find 命令
然后,您将查找连续包含 8 个字符的文件名,这些字符可以是小写字母、大写字母或数字 (crc32)
以下命令可以正常工作
find . -regex '.*[0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z].*'
更好的是,你可以使用选项
-regextype posix-extended
选择图案重复次数 {8},如下所示
find . -regextype posix-extended -regex '.*[0-9a-zA-Z]{8}.*'
.* 表示零个或多个随机字符
[0-9a-zA-Z]{8} 表示 0 到 9 或 a 到 z 或 A 到 Z 的任意字符连续出现 8 次
如果需要,您还可以在 crc32 周围添加文件扩展名或特定模式。
您可以详细了解正则表达式改善你的搜索模式