bash脚本以递归方式从文件夹中删除以偶数结尾的文件

时间:2016-07-01 13:08:27

标签: regex bash

我有一个嵌套的文件夹层次结构,包含数百个格式为[a-z]的文件。[0-9] .h5

其中[a-z]可以是任何长度的字母数字,[0-9]可以是任意数量的数字但总是数字,并且扩展名是固定的,h5。

e.g。

  • model1_weights.1.h5
  • model354_weights.64.h5

为节省空间,我想删除所有EVEN文件

e.g。这些仍然存在:

  • model1_weights.1.h5
  • model1_weights.37.h5
  • model1_weights.185.h5

但是这些

  • model1_weights.0.h5
  • model1_weights.32.h5
  • model1_weights.184.h5

我知道如何在python中执行此操作,遍历所有目录,分割点,检查和删除。但我觉得这应该可以使用rm -rf(或find)和regex的单个bash命令。这可能吗?

注意:将来为了节省更多空间,我可能希望删除3个文件中的每2个。即,只有当(i%n == 1)其中i是文件的索引时,一般模式才是KEEP,而n是任意数字(例如2或3)

1 个答案:

答案 0 :(得分:3)

你应该能够使用这样的东西:

shopt -s globstar failglob
rm -rf **/model*_weights.*{0,2,4,6,8}.h5

在运行之前,我会将rm -rf更改为echo!或者,printf '%s\n'会提供更清晰的输出。

shell选项globstar允许您使用**进行递归匹配。 failglob确保在没有与模式匹配的情况下不运行命令。