如何递归删除文件夹中与给定模式不匹配的所有文件

时间:2016-03-31 09:59:29

标签: linux

我想删除给定文件夹中与模式^transactions_[0-9]+

不匹配的所有文件

假设我在文件夹

中有这些文件
file_list
transactions_010116.csv
transactions_020116.csv
transactions_check_010116.csv
transactions_check_020116.csv

我想删除transactions_check_010116.csvtransactions_check_020116.csv,并在使用^transactions_[0-9]+时保留前两个

我一直在尝试使用find之类的东西,但是这个表达式会删除文件夹中的所有内容,而不仅仅是与模式不匹配的文件:

find /my_file_location -type f ! -regex '^transactions_[0-9]+' -delete

我在这里尝试做的是使用正则表达式查找不以^transactions_[0-9]+开头的文件夹中的所有文件并删除它们。

2 个答案:

答案 0 :(得分:1)

grep 有-v选项来grep与提供的正则表达式不匹配的所有内容:

find . | grep -v '^transactions_[0-9]+'  | xargs rm -f

答案 1 :(得分:1)

根据您的实现,您可能必须使用选项-E来允许使用完整的正则表达式。另一个问题是-regex为您提供了几乎完整的路径,从您传递的目录开始。

所以正确的命令应该是:

 find -E /my_file_location ! -regex '.*/transactions_[0-9]+$' -type f -delete

但你应该首先与-print发布相同的内容以确保...