使用find和grep删除文件列表

使用find和grep删除文件列表,grep,find,pipe,rm,Grep,Find,Pipe,Rm,我想删除所有名称包含特定单词的文件,例如“car”。 到目前为止,我想到了这个: find|grep car 如何将输出传递给rm find . -name '*car*' -exec rm -f {} \; 或者将管道的输出传递到xargs: find | grep car | xargs rm -f 请注意,这些工具非常钝,您可能会删除不打算删除的文件。此外,这里不需要处理包含空格(包括换行符)或前导破折号等字符的文件。被警告 首先查看要删除的内容,因为rm-fr是一个非常危险的命令:

我想删除所有名称包含特定单词的文件,例如“car”。 到目前为止,我想到了这个:

find|grep car
如何将输出传递给rm

find . -name '*car*' -exec rm -f {} \;
或者将管道的输出传递到
xargs

find | grep car | xargs rm -f

请注意,这些工具非常钝,您可能会删除不打算删除的文件。此外,这里不需要处理包含空格(包括换行符)或前导破折号等字符的文件。被警告

首先查看要删除的内容,因为
rm-fr
是一个非常危险的命令:

find start_dir -iname \*car\* -exec rm -v {} \;
find /path/to/file/ | grep car | xargs ls -lh
然后,如果结果是您想要的,则通过删除
ls-lh
,将其替换为
rm-fr
来运行real命令

find /path/to/file/ | grep car | xargs rm -fr
我喜欢使用

rm-rf$(查找。|格雷普汽车)


它完全按照您的要求执行,在
grep car
find.
输出返回的内容上逻辑运行
rm-rf
。是每个文件和文件夹的递归列表。

有点巫术,但您也可以使用find、grep和xargs

find . -type f | grep -e "pattern1" -e "pattern2" | xargs rm -rf

^“查找”需要一些注意,以使其能够满足您的潜在需求,例如是一个文件、mindepth、maxdepth和任何globbing。

您确实希望将
Find
-print0
rm
--
一起使用:

具体示例(删除文件名中包含car的当前目录下的所有文件):

为什么有必要这样做:

  • -print0
    -null data
    -0
    将输入/输出的处理方式从解析为由空格分隔的标记更改为解析为由
    \0
    -字符分隔的标记。这允许处理不寻常的文件名(有关详细信息,请参阅
    man find
  • rm--
    确保实际删除以
    -
    开头的文件,而不是将其作为
    rm
    的参数。如果有一个名为
    -rf
    的文件,请执行
    查找-print0 | grep--空数据r | xargs-0 rm
    ,文件
    -rf
    可能不会被删除,但会改变rm在其他文件上的行为

这将查找具有匹配模式(*.xml)的文件,并将其内容变灰为匹配字符串(exclude=“1”),如果找到匹配项,则删除该文件

find . -type f -name "*.xml" -exec grep exclude=\"1\" {} \; -exec rm {} \;

您可以使用ls和grep查找文件,使用rm-rf删除文件

rm -rf $(ls | grep car)

但是,如果可能存在您不想删除的目录或文件,并且名称具有您用grep指定的字符模式,则使用此命令不是一个好主意。

find | grep car | xargs rm-f
获取结果时:

/path/to/car  
/path/to/car copy  
某些包含空格的文件将不会被删除

因此,我的答案是:

find | grep car | while read -r line ; do 
  rm -rf "${line}"
done
因此,可以删除包含空白的文件。

使用带通配符的rm* rm*将删除所有文件 rm*.ext将删除扩展名为ext的所有文件
rm word*将删除所有以word开头的文件。

甚至可能
find-名称“*car*”-删除
+1。但在最初的几次运行中:将“rm”更改为“echo rm”。。。并验证它是否只输出您真正想要删除的文件,而不输出其他文件^^@nhahtdh:
xargs:invalize选项--d
;并非所有的世界都是LInux。那么名称中包含
\n
的目录又如何呢?如果您担心空白,应该使用
find--print0。。。xargs-0
alias cleandesktop=“find~/Desktop/-name'*屏幕截图*'-exec rm-f{}\;”BOOM。是的。请注意,如果您的文件包含异常字符(如空格)或以破折号开头,则此操作将不起作用。有关修复方法,请参阅。在MacOS上,
--null data
是一个“无法识别的选项”。
--null
会是grep的等效选项吗?@SteveS对于mac有一个更简单的方法:(我不知道如何使用
grep
xargs
,很遗憾)惊人的解决方案!非常感谢。
/path/to/car  
/path/to/car copy  
find | grep car | while read -r line ; do 
  rm -rf "${line}"
done