Bash-查找名称中有重复编号的文件
我有一个包含许多子目录的目录,我想递归地搜索名称中有重复编号的jpg文件 澄清-文件名称中有尺寸标注,例如300x300,我只想列出方形图像。尺寸不同(即500x500;1200x1200等)Bash-查找名称中有重复编号的文件,bash,macos,find,Bash,Macos,Find,我有一个包含许多子目录的目录,我想递归地搜索名称中有重复编号的jpg文件 澄清-文件名称中有尺寸标注,例如300x300,我只想列出方形图像。尺寸不同(即500x500;1200x1200等) 我正在使用Mac OS。您可以将gnu find与regex一起使用: find . -regextype posix-extended -iregex '.*\b([0-9]+)x\1\.jpg$' ([0-9]+)x\1确保重复由x分隔的相同数字 在OSX(BSD)find上,您可以使用: find
我正在使用Mac OS。您可以将
gnu find
与regex一起使用:
find . -regextype posix-extended -iregex '.*\b([0-9]+)x\1\.jpg$'
([0-9]+)x\1
确保重复由x
分隔的相同数字
在OSX(BSD)find上,您可以使用:
find . -iregex '.*[[:<:]]\([0-9][0-9]*\)x\1\.jpg$'
find-iregex'.*[:管道的第一部分查找树中的所有jpg文件。管道的第二部分过滤这些结果
find . -type f -name '*.jpg' | egrep '[^\d](\d+)x\1'
有一些方法可以扩展正则表达式以支持变体,但根据您的描述,这应该足够了。OSX有BSDfind
,而不是GNUfind
。它没有-regextype
。实际上我有这两种方法。GNU find
使用家用brew
,但我只是在回答中添加了它与GNU一起工作查找
。请注意,这查找的正是path/to/300x300.jpg
;您必须对正则表达式进行调整,以允许path/to/picture-name-300x300.jpg
,这可能是OP的目标。OSX上的egrep
应该支持像\1
这样的反向引用,这样您就可以通过从查找
过滤结果>egrep
并期望文件正确匹配。您可以使用查找。-regex.*/[^/]*\([0-9][0-9]*\)Mac OS x 10.11.6上的x\1\.jpg$'
查找/a1/file-100x100.jpg
和/a1/file-1200x1200.jpg
等名称,而不查找/b3/file-100x101.jpg
和/b3/file-200x201.jpg
等名称。请注意,问题是您需要使用(
和)
执行捕获,而不是\1
反向引用本身不起作用。您需要使用grep-E
或egrep
@barmar mygrep
别名为egrep
。这是一种罪过。奇怪的怪癖:这选择了我的测试名称/b3/file-303x304.jpg
和/b3/file-919x920.jpg
。它是c更正:第一个匹配3x3,第二个匹配9x9,但这不是预期的结果。肯定是意外行为。捕捉得好。这可能是解药:[^0-9](\d+)x\1