当我做的时候
rm file.txt
或者rm *.txt
由于我没有使用-f
选项来执行rm
命令,所以会提示我确认是否删除每个文件。
但是当我执行以下操作时:
find . -type f -name '*.txt' | xargs rm
文件被删除时没有确认。
这背后的逻辑是什么?有可能在某些文档中找到原因吗?我无法解释为什么会这样。
rm file.txt
rm *.txt
别名将被扩展。如果你像这样用xargs调用它
find . -type f -name '*.txt' | xargs rm
将rm作为简单的字符串参数传递给xargs,然后由xargs调用而不进行shell别名替换。 如果您想删除它,请查看~/.bashrc中可能定义的别名。
find -exec
命令。 - Mihail H.config file.txt
和 config
),那么 find . -type f -name '*.txt' | xargs rm
将会删除 config
文件但不会删除 config file.txt
文件。 - Mihail H.您可以使用这个简单的命令来解决您的问题。
find . -type f -name '*.txt' -delete
-type
而不是--type
,否则这个解决方案对我很有效。 - Levon根据您使用的xargs版本,您可能可以使用--no-run-if-empty GNU 扩展选项:
find . -type f -name '*.txt' | xargs --no-run-if-empty rm -rf
find PATH_DIR1 -type f -exec basename '{}' ';' | xargs printf -- 'PATH_DIR2/%s\n' | xargs rm
解释:
find PATH_DIR1 -type f -exec basename '{}' ';'
xargs printf -- 'PATH_DIR2/%s\n'
xargs rm
alias rm
给出rm -i
的输出,这就解释了它。谢谢 - Martin G