Linux 删除不包含';不匹配特定的字符串格式

Linux 删除不包含';不匹配特定的字符串格式,linux,bash,macos,find,Linux,Bash,Macos,Find,我有一组名称类似的文件: TEXT_TEXT_YYYYMMDD 示例文件名: My_House_20170426 我正在尝试删除所有与此格式不匹配的文件。每个文件都应该有一个文本字符串,后跟一个下划线,后跟另一个文本字符串和另一个下划线,然后是一个日期戳YYYYMMDD 是否有人可以提供一些建议,说明如何构建一个find或remove语句来删除与此格式不匹配的文件 grep -v '(pattern)' 将筛选出与模式匹配的行,保留不匹配的行。您可以尝试在ls的输出中使用管道。如果您特别勇

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

TEXT_TEXT_YYYYMMDD
示例文件名:

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

是否有人可以提供一些建议,说明如何构建一个
find
remove
语句来删除与此格式不匹配的文件

grep -v '(pattern)'

将筛选出与模式匹配的行,保留不匹配的行。您可以尝试在
ls
的输出中使用管道。如果您特别勇敢,可以通过管道将输出传输到类似
xargsrm
的东西。但是删除有点可怕,所以可能会先将输出保存到一个文件中,查看它,然后删除列出的文件。

使用
查找
,添加
-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}'

有意只为文本匹配字母字符。如果您需要数字,请将
0-9
添加到每个文本区域,如下所示
[a-z0-9]

到目前为止您尝试了什么?提示:尝试玩
echo My_House_20170426 | grep-E“pattern”
,直到它正确匹配。然后使用grep的
-q
选项,如下使用:
if echo$filename | grep-qE模式;然后…
实际查看是否可以使用
查找路径-not-regex模式-delete
。首先测试,不使用
-删除
。wrt
日期戳YYYYMMDD
-如果文件名为
text\u text\u 86753090
,或者其他8位数字的组合不是有效日期,该怎么办?删除它还是保留它?只要有八位数字,我就可以保证数据格式正确。+1建议不要使用
xargs-rm
,除非您能够首先找到正确的文件。最后一件事是你回来问是否有意外恢复文件意外删除这里可能有两件事要考虑,否则这是一个像样的解决方案。我可能会使用
[a-z0-9]
至少在文件名中有数字的情况下,否则像
file1\u name\u 20170425这样的文件也会消失。我可能提到的另一件事是,如果有一个目录
some\u directory\u 123
,如果其中有一个不应该被删除的文件,它就不会被删除-这可能很好,只是指出这一点。