我有一个文件夹,其中包含具有相同文件的子文件夹,例如:
dsc_9660__content_w.jpg
dsc_9660__content.jpg
dsc_9660__h70.jpg
dsc_9660__small.jpg
dsc_9660.jpg
后缀-是不同大小的图像。
如何删除所有带有后缀的文件,如下所示:__[a-zA-z0-9].(png|jpg|jpeg)
?
并仅保留没有后缀的原始图像,如dsc_9660.jpg
我的示例所示
答案1
尝试寻找命令及其-regex
开关或-iregex
(不区分大小写),将您的正则表达式更改为.*__[a-zA-z0-9_]*\.(png|jpg|jpeg)
并使用该-delete
选项删除匹配的文件:
find . -type f -regextype "posix-egrep" -iregex '.*__[a-zA-z0-9_]*\.(png|jpg|jpeg)$'
您可以使用其他类型的-regextype
(有效的)代替“posix-egrep”,例如:
“posix-extended”或“posix-awk”。
-regex pattern
File name matches regular expression pattern. This is a match on the whole path, not a search. For
example, to match a file named './fubar3', you can use the regular expression '.*bar.' or '.*b.*3',
but not 'f.*r3'. The regular expressions understood by find are by default Emacs Regular Expres‐
sions, but this can be changed with the -regextype option.
-iregex pattern
Like -regex, but the match is case insensitive.
-regextype type
Changes the regular expression syntax understood by -regex and -iregex tests which occur later on the
command line. Currently-implemented types are emacs (this is the default), posix-awk, posix-basic,
posix-egrep and posix-extended.
-delete
Delete files
最后添加-delete
开关到命令来删除匹配的文件:
find . -type f -regextype "posix-egrep" -iregex '.*__[a-zA-z0-9_]*\.(png|jpg|jpeg)$' -delete
.*__[a-zA-z0-9_]*\.(png|jpg|jpeg)
- 匹配
.*
之前的所有__
- 匹配
__
双下划线。 - 匹配
[a-zA-z0-9_]*
所有字母数字和单个下划线_
字符。这*
意味着此类字符的长度可以为零。 - 匹配
\.
单个点。要逐字匹配点 (.
),您需要在正则表达式中使用反斜杠对其进行转义;如果不进行转义,它将匹配任何单个字符。 - 在 中
(png|jpg|jpeg)
,一对括号使其成为一组匹配项。将匹配png
或 (|
)jpg
或jpeg
。 - 锚点
$
,匹配字符串的结尾(或在本例中为文件名)
答案2
cd <dir>
find . -type f -iname \*__*.jpg -delete
答案3
尝试以下命令,
cd <dir>
find . -type f -iname \*.jpg -delete
-type----> 输入文件的类型(__[a-zA-z0-9].(png|jpg|jpeg))并使用该命令。
希望这可以帮助。