Linux 如何递归删除文件夹中与给定模式不匹配的所有文件
我想删除给定文件夹中与模式不匹配的所有文件Linux 如何递归删除文件夹中与给定模式不匹配的所有文件,linux,Linux,我想删除给定文件夹中与模式不匹配的所有文件^transactions\[0-9]+ 假设我在文件夹中有这些文件 file_list transactions_010116.csv transactions_020116.csv transactions_check_010116.csv transactions_check_020116.csv 我想删除事务检查\u 010116.csv和事务检查\u 020116.csv,并将前两个保留为使用^transactions\u[0-9]+ 我一直
^transactions\[0-9]+
假设我在文件夹中有这些文件
file_list
transactions_010116.csv
transactions_020116.csv
transactions_check_010116.csv
transactions_check_020116.csv
我想删除事务检查\u 010116.csv
和事务检查\u 020116.csv
,并将前两个保留为使用^transactions\u[0-9]+
我一直在尝试使用find
类似于以下内容,但此表达式删除文件夹中的所有内容,而不仅仅是与模式不匹配的文件:
find /my_file_location -type f ! -regex '^transactions_[0-9]+' -delete
我在这里尝试的是使用regex查找文件夹中所有不以
^transactions.[0-9]+
开头的文件并将其删除 grep具有-v选项,可以对与提供的正则表达式不匹配的所有内容进行grep:
find . | grep -v '^transactions_[0-9]+' | xargs rm -f
grep具有-v选项,可以对与提供的正则表达式不匹配的所有内容进行grep:
find . | grep -v '^transactions_[0-9]+' | xargs rm -f
根据您的实现,您可能必须使用选项-E来允许使用完整的正则表达式。另一个问题是,
-regex
提供了一个几乎完整的路径,从所传递的目录开始
因此,正确的命令应该是:
find -E /my_file_location ! -regex '.*/transactions_[0-9]+$' -type f -delete
但是您应该首先对
-print
发出相同的命令,以确保……根据您的实现,您可能必须使用选项-E来允许使用完整的正则表达式。另一个问题是,-regex
提供了一个几乎完整的路径,从所传递的目录开始
因此,正确的命令应该是:
find -E /my_file_location ! -regex '.*/transactions_[0-9]+$' -type f -delete
但是你应该首先用
-print
发布同样的问题,以确保…谢谢你的快速回复,我已经测试了你推荐的解决方案>查找/my_文件位置| grep-v'transactions[0-9]\+'| xargs rm-f
,我不得不避开+
,但我认为它就快到了。唯一的问题是,它也在尝试删除目录,是否可以将其调整为只删除文件?我尝试了这个>find-type f/my_file\u location}grep-v'transactions[u[0-9]\+'\xargs rm-f
,但是路径的错误必须在表达式之前,把它放在文件路径后面会出现一个grep:invalid--'t'
-你对我在这里做错了什么有什么想法吗?我建议:find-type f/my\u file\u location | grep'transactions\u[0-9]\+'| xargs rm-f
谢谢你的快速回复,我已经测试了您推荐的解决方案>find/my_file\u location\124; grep-v'transactions\u[0-9]\+'\124rgs rm-f
我不得不避开+
,但我认为它就快到了。唯一的问题是,它也在尝试删除目录,是否可以将其调整为只删除文件?我尝试了这个>find-type f/my_file\u location}grep-v'transactions[u[0-9]\+'\xargs rm-f
,但是路径的错误必须在表达式之前,把它放在文件路径后会出现一个grep:invalid--'t'
-你对我在这里做错了什么有什么想法吗?我的建议是:find-type f/my\u file\u location | grep'transactions\u[0-9]\+'| xargs rm-f
谢谢你的回复,不幸的是,它返回的是find:unknown谓词-E'
-还有其他方法可以将正则表达式与find命令一起使用吗?我尝试查找/my\u file\u位置-regextype sed-regex“*/transactions\[0-9]\+”-typef-delete
,但没有找到模式,因此删除了folder@SamGilbert:此是否查找/my\u文件\u位置-regex'.*/transactions[0-9]+$'-type f-print
列出要删除的文件?由于我没有与您相同的查找
,您可以传递什么到-regextype
?啊,我知道了,模式'.*/transactions.[0-9]+.'
打印所需的文件!现在可以删除它们了,感谢您的帮助这是我使用的解决方案>查找/my_file_位置-regex.*/transactions.[0-9]+.'-type f-delete
感谢您的回复,不幸的是,它返回了find:unknown predicate-E'
-是否有其他方法将regex表达式与find命令一起使用?我尝试查找/my\u file\u位置-regextype sed-regex“*/transactions\[0-9]\+”-typef-delete
,但没有找到模式,因此删除了folder@SamGilbert:此是否查找/my\u文件\u位置-regex'.*/transactions[0-9]+$'-type f-print
列出要删除的文件?由于我没有与您相同的查找
,您可以传递什么到-regextype
?啊,我知道了,模式'.*/transactions.[0-9]+.'
打印所需的文件!现在可以删除它们了,感谢您的帮助这是我使用的解决方案>查找/my_file_位置-正则表达式'.*/transactions.[0-9]+.'-type f-delete