不带 find 的 rm `find lib/ -name *.swp` 的等价物是什么?

不带 find 的 rm `find lib/ -name *.swp` 的等价物是什么?

我想最后删除lib目录中的所有文件。.swp

我怎样才能做到这一点而不find需要:

rm `find lib/ -name *.swp`

答案1

查找的好处是它是递归的。一些现代 shell 提供搜索递归,但它不符合 POSIX 标准,因此您不能依赖它们在任何地方工作。这是一个在 bash 4.0 及更高版本中运行的示例。

shopt -s globstar
for f in **/*.swp; do
    rm -- "$f"
done

就您已有的 find 命令而言,它会破坏任何包含空格(例如空格)的文件。这是一个固定的例子:

find lib/ -name '*.swp' -exec rm {} +

对于某些版本find,您可以使用-delete

find lib/ -name '*.swp' -delete

答案2

cd lib && ls -R  | grep '\.swp$' | xargs -d '\n' rm

至于你原来的,我会这样做:

find lib -name '*.swp' | xargs -d '\n' rm

因为如果find没有返回结果,你就不会得到错误。

您可能还想使用\! -type dsofind不返回任何恰好被调用的目录*.swp,因为rm将无法删除它们。您可以使用我的替代方法执行类似的操作,ls -RF因为目录会出现尾随,/因此与正则表达式不匹配。

相关内容