Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash-查找名称中有重复编号的文件_Bash_Macos_Find - Fatal编程技术网

Bash-查找名称中有重复编号的文件

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

我有一个包含许多子目录的目录,我想递归地搜索名称中有重复编号的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 . -iregex '.*[[:<:]]\([0-9][0-9]*\)x\1\.jpg$'

find-iregex'.*[:管道的第一部分查找树中的所有jpg文件。管道的第二部分过滤这些结果

find . -type f -name '*.jpg' | egrep '[^\d](\d+)x\1'

有一些方法可以扩展正则表达式以支持变体,但根据您的描述,这应该足够了。

OSX有BSD
find
,而不是GNU
find
。它没有
-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 my
grep
别名为
egrep
。这是一种罪过。奇怪的怪癖:这选择了我的测试名称
/b3/file-303x304.jpg
/b3/file-919x920.jpg
。它是c更正:第一个匹配3x3,第二个匹配9x9,但这不是预期的结果。肯定是意外行为。捕捉得好。这可能是解药:
[^0-9](\d+)x\1