删除除正则表达式匹配的所有文件

时间:2017-04-25 14:47:50

标签: regex find

我有一组由wordpress生成的图像,我需要摆脱它们(一个生成集的示例):

  • Y3A6036-1-150x150.jpg
  • Y3A6036-1-180x138.jpg
  • Y3A6036-1-220x161.jpg
  • Y3A6036-1-300x200.jpg
  • Y3A6036-1-300x214.jpg
  • Y3A6036-1-460x295.jpg
  • Y3A6036-1-540x272.jpg
  • Y3A6036-1-700x441.jpg
  • Y3A6036-1-768x512.jpg
  • Y3A6036-1-940x400.jpg
  • Y3A6036-1-1024x683.jpg
  • Y3A6036-1.jpg

但我需要保留以下内容(本例中为最后两个):

  • Y3A6036-1-1024x683.jpg
  • Y3A6036-1.jpg

我正在尝试使用:

find /myPathToImages -type f -name '*[0-9]x*[0-9].jpg' -delete

但我也摆脱了1024x683版本。我该如何过滤掉它?

更新:

正则表达式还必须考虑垂直图像,如下所示:

  • 垂直1-683x1024.jpg
  • 垂直1.JPG

逻辑规则是删除除原始图像以外的所有图像和宽度或高度均为1024的图像

3 个答案:

答案 0 :(得分:1)

为什么要比它更难?你显然有办法找到你想要保留的图像。将它们移动到单独的目录中。如果需要,可以使用以下内容自动执行:

mkdir keep
for file in $(ls | grep <regex>); do mv $file keep; done
rm *
mv keep/* .
rm -rf keep

也许不是最优雅的解决方案,但它有效且总体思路非常灵活。

答案 1 :(得分:0)

要删除的文件名有一个模式,它们都有 3digits x 3digits ,基于此,您可以使用:

.*-[0-9]{3}x[0-9]{3}\.jpg

Regex Demo and Explanation

答案 2 :(得分:0)

Juste使用这个:

find /myPathToImages -type f -name '*-[0-9]{3}x[0-9]{3}.jpg' -delete

这将删除所有看起来像这样的图像 3位x 3位数。

正如@Pedro Lobito指出的那样,您需要在模式前添加-以便不匹配4位长度。由*引起的原因它会考虑: *后跟3位数字。