【发布时间】:2014-01-18 11:01:20
【问题描述】:
我想删除所有名称中包含特定单词的文件,例如“车”。 到目前为止,我想出了这个:
find|grep car
如何将输出传递给 rm?
【问题讨论】:
我想删除所有名称中包含特定单词的文件,例如“车”。 到目前为止,我想出了这个:
find|grep car
如何将输出传递给 rm?
【问题讨论】:
find . -name '*car*' -exec rm -f {} \;
或将管道的输出传递给xargs:
find | grep car | xargs rm -f
请注意,这些是非常生硬的工具,您可能会删除您不打算删除的文件。此外,这里不努力处理包含诸如空格(包括换行符)或前导破折号等字符的文件。被警告。
【讨论】:
find . -name '*car*' -delete。
xargs: illegal option -- d;全世界都不是Linux。那么名称中包含\n 的目录呢?如果你担心空格,你应该使用find --print0 ... xargs -0
alias cleandesktop="find ~/Desktop/ -name '*Screen Shot*' -exec rm -f {} \;" 繁荣。是的。
find start_dir -iname \*car\* -exec rm -v {} \;
【讨论】:
要先查看要删除的内容,因为rm -fr 是一个危险的命令:
find /path/to/file/ | grep car | xargs ls -lh
然后,如果结果是您想要的,则通过删除 ls -lh 运行实际命令,将其替换为 rm -fr
find /path/to/file/ | grep car | xargs rm -fr
【讨论】:
我喜欢用
rm -rf $(find . | grep car)
它完全按照您的要求运行,在 grep car 从 find . 的输出返回的内容上运行 rm -rf,这是递归每个文件和文件夹的列表。
【讨论】:
有点死灵法,但你也可以使用 find、grep 和 xargs
find . -type f | grep -e "pattern1" -e "pattern2" | xargs rm -rf
^ Find 需要一些注意才能使其潜在地满足您的需求,例如文件、最小深度、最大深度和任何通配符。
【讨论】:
您确实想将find 与-print0 和rm 与-- 一起使用:
find [dir] [options] -print0 | grep --null-data [pattern] | xargs -0 rm --
一个具体的例子(删除当前目录下所有文件名中包含汽车的文件):
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 在其他文件上的行为。【讨论】:
--null-data 是一个“无法识别的选项”。 --null 会是 grep 的等效选项吗?
grep和@ 987654342@,很遗憾)
这会找到一个具有匹配模式 (*.xml) 的文件,并 grep 其内容以查找匹配的字符串 (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开头的文件。
【讨论】:
这里介绍的大多数其他解决方案在处理包含空格的文件名时都存在问题。这是一个正确处理空格的解决方案。
grep -lRZ car . | xargs -0 rm
使用的参数注意事项:
-l 告诉 grep 只打印文件名-R 启用 grep 在子文件夹中递归搜索-Z 告诉 grep 用 \0 而不是 \n 分隔结果
-0 告诉 xargs 用 \0 分隔输入参数,而不是空格car 是要搜索的正则表达式. 是要搜索的文件夹也可以使用rm -f 强制删除(像往常一样)。
【讨论】: