删除匹配模式的文件

mik*_*eum 47 bash find wildcards files

我需要递归删除所有子目录中的所有文件,其中文件名包含一个数字,后跟一个“x”,后跟一个数字,至少两次。

例子:

我想删除这些文件:

'aaa-12x123-123x12.jpg'
'aaa-12x12-123x12-12x123.jpg'
Run Code Online (Sandbox Code Playgroud)

但我不想删除这些文件:

'aaa.jpg'
'aaa-12x12.jpg'
'aaaxaaa-123x123.jpg'
'aaaxaaa-aaaxaaa.jpg'
Run Code Online (Sandbox Code Playgroud)

我该怎么做(来自 bash shell)

Gil*_*il' 83

一个字符串包含“一个数字后跟x一个数字”当且仅当它包含一个数字后跟x一个数字,即如果它包含一个与模式匹配的子字符串[0-9]x[0-9]。因此,您要删除名称与 pattern 匹配的文件*[0-9]x[0-9]*[0-9]x[0-9]*.jpg

find /path/to/directory -type f -name '*[0-9]x[0-9]*[0-9]x[0-9]*.jpg' -delete
Run Code Online (Sandbox Code Playgroud)

如果您find没有-delete,请致电rm删除文件。

find /path/to/directory -type f -name '*[0-9]x[0-9]*[0-9]x[0-9]*.jpg' -exec rm {} +
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!12.000 个文件在 2 秒内消失了。这为我节省了一些体力劳动! (3认同)
  • @Tamlyn 使用 `-print0` 和 `xargs -0`,否则命令将失败,文件名包含空格或单引号。但是 `-delete` 和 `-exec rm` *do* 在 Windows 上工作。如果某些东西不起作用,那不是因为它们的使用。 (2认同)