使用find和grep删除文件列表

时间:2013-12-31 14:00:58

标签: grep find pipe rm

我想删除所有包含特定字词的文件,例如“汽车”。 到目前为止,我想出了这个:

find|grep car

如何将输出传递给rm?

10 个答案:

答案 0 :(得分:77)

find . -name '*car*' -exec rm -f {} \;

或将管道输出传递给xargs

find | grep car | xargs rm -f

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

答案 1 :(得分:9)

要查看您要删除的内容,因为rm -fr是危险的命令:

find /path/to/file/ | grep car | xargs ls -lh

然后,如果结果符合您的要求,请删除ls -lh并将其替换为rm -fr

,然后运行实际命令
find /path/to/file/ | grep car | xargs rm -fr

答案 2 :(得分:4)

我喜欢用

rm -rf $(find . | grep car)

它完全按照您的要求运行rm -rf,以grep carfind .的输出返回Length = input(10, minval=1) xHL2 = hl2 xMaxH = highest(xHL2, Length) xMinL = lowest(xHL2,Length) nValue1 = 0.33 * 2 * ((xHL2 - xMinL) / (xMaxH - xMinL) - 0.5) + 0.67 * nz(nValue1[1]) nValue2 = iff(nValue1 > .99, .999, iff(nValue1 < -.99, -.999, nValue1)) nFish = 0.5 * log((1 + nValue2) / (1 - nValue2)) + 0.5 * nz(nFish[1]) pos = iff(nFish > nz(nFish[1]), 1, iff(nFish < nz(nFish[1]), -1, nz(pos[1], 0))) barcolor(pos == -1 ? red: pos == 1 ? green : blue ) plot(nFish, color=green, title="Fisher") plot(nz(nFish[1]), color=red, title="Trigger") ,这是递归的每个文件和文件夹的列表。

答案 3 :(得分:2)

您确实希望将find-print0rm--一起使用:

find [dir] [options] -print0 | grep --null-data [pattern] | xargs -0 rm --

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

find . -print0 | grep --null-data car | xargs -0 rm --

为什么这是必要的:

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

答案 4 :(得分:2)

这会找到一个匹配模式(* .xml)的文件,并将其内容grery用于匹配字符串(exclude =&#34; 1&#34;),如果找到匹配项,则删除该文件。

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

答案 5 :(得分:1)

有点神秘,但你也可以使用find,grep和xargs

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

^ Find需要注意使其能够满足您的需求,例如文件,mindepth,maxdepth和任何通配。

答案 6 :(得分:0)

find start_dir -iname \*car\* -exec rm -v {} \;

答案 7 :(得分:0)

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

rm -rf $(ls | grep car)

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

答案 8 :(得分:0)

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

因此可以删除包含空格的文件。

答案 9 :(得分:0)

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