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

Jim*_*Fan 4 linux macos bash find

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

TEXT_TEXT_YYYYMMDD
Run Code Online (Sandbox Code Playgroud)

文件名示例:

My_House_20170426
Run Code Online (Sandbox Code Playgroud)

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

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

Har*_*vey 6

使用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}'
Run Code Online (Sandbox Code Playgroud)

有意仅匹配 TEXT 的字母字符。如果您需要数字,请像这样添加0-9到每个文本区域[a-z0-9]