linux 使用find和xargs使用rm删除文件

n9vozmp4  于 2023-11-17  发布在  Linux
关注(0)|答案(4)|浏览(161)

当我做

rm file.txt

字符串

rm *.txt


系统提示输入每个文件,因为我没有为rm指定-f选项。
但当我这样做时:

find . -type f -name '*.txt' | xargs rm


文件在没有确认的情况下被删除。
这背后的逻辑是什么?有没有可能在一些文件中找到原因?我无法解释为什么会这样。

kh212irz

kh212irz1#

您将rm命令的别名设置为“rm -i”。

rm file.txt

字符串

rm *.txt


别名将被展开。如果您使用xargs调用它,如

find . -type f -name '*.txt' | xargs rm


rm作为一个简单的字符串参数传递给xargs,然后由xargs调用,而不使用shell的别名替换。您的别名可能在~/.bashrc中定义,以防您想要删除它。

hfyxw5xn

hfyxw5xn2#

你可以使用这个简单的命令来解决你的问题

find . -type f -name '*.txt' -delete

字符串

1wnzp6jl

1wnzp6jl3#

根据您的xargs版本,您可能会使用--no-run-if-empty GNU扩展选项:

find . -type f -name '*.txt' | xargs  --no-run-if-empty  rm -rf

字符串

blmhpbnm

blmhpbnm4#

要将PATH_DIR 2中的现有文件删除到PATH_DIR 1中:

find PATH_DIR1 -type f  -exec basename '{}' ';' | xargs printf -- 'PATH_DIR2/%s\n' | xargs rm

字符串
说明:
1.列出PATH_DIR 1中的所有文件名
find PATH_DIR1 -type f -exec baseband“{}”;“
1.使用PATH_DIR2中的现有文件过滤前面的列表(查找相交数据)
xargs printf --“PATH_DIR2/%s\n”
1.对过滤后的结果执行删除操作
沙格什河

相关问题