删除与特定字符串格式不匹配的文件

时间:2017-04-26 23:23:41

标签: linux bash macos find

我有一组命名相似的文件:

TEXT_TEXT_YYYYMMDD

示例文件名:

My_House_20170426

我正在尝试删除与此格式不匹配的所有文件。每个文件都应该有一个文本字符串后跟一个下划线,后跟另一个文本字符串和另一个下划线,然后是YYYYMMDD的日期戳。

有人可以提供一些关于如何构建findremove语句的建议,该语句将删除与此格式不匹配的文件吗?

2 个答案:

答案 0 :(得分:4)

使用find,一旦确定有效,就将-delete添加到最后。

# gnu find
find . -regextype posix-egrep -type f -not -iregex '.*/[a-z]+_[a-z]+_[0-9]{8}'

# OSX find
find -E . -type f -not -iregex '.*/[a-z]+_[a-z]+_[0-9]{8}'

故意仅匹配TEXT的字母字符。如果您需要数字,请将0-9添加到每个TEXT区域,例如[a-z0-9]

答案 1 :(得分:1)

grep -v '(pattern)'

将过滤掉与模式匹配的行,留下那些不匹配的行。您可以尝试在ls的输出中使用管道。如果你特别勇敢,你可以将输出管道输出到xargs rm之类的东西。但删除有点可怕,所以可能先将输出保存到文件中,查看它,然后删除列出的文件。