我想最后删除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 d
sofind
不返回任何恰好被调用的目录*.swp
,因为rm
将无法删除它们。您可以使用我的替代方法执行类似的操作,ls -RF
因为目录会出现尾随,/
因此与正则表达式不匹配。