Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何递归删除文件夹中与给定模式不匹配的所有文件_Linux - Fatal编程技术网

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