您的bash别名写得不好(单引号没有被很好地使用)。相反,它应该是:
alias rm~='find . -name "*~" -print0 | xargs -0 /bin/rm -f'
现在,我个人不喜欢管道和的无用用法xargs
,因此最好将别名写成:
alias rm~='find . -name "*~" -type f -exec /bin/rm -fv -- {} +'
该-type f
选项仅查找文件(不查找目录,链接等),该-v
选项rm
仅显示详细信息(打印出要删除的内容)。将+
在年底使find
运行rm
的所有找到的文件(产卵只有一个实例rm
,而不是每个文件一个)。
现在来自man bash
:
对于几乎所有目的,别名都被shell函数取代。
代替别名,最好使用一个函数:在.bash_aliases
文件中注释您的别名(即,#
在该行的前面),然后在文件中.bashrc
,将该函数(在文件的任何位置,最后都可以) :
rm~() {
find . -name "*~" -type f -exec /bin/rm -fv -- {} +
}
另外,如其他答案所述,您可以使用-delete
命令进行查找。在这种情况下,您的rm~
功能将是:
rm~() {
find . -name "*~" -type f -printf "Removing file %p\n" -delete
}
实际上,您可以使一个很酷的函数带有一个参数,例如--dry-run
,仅输出将要删除的内容:
rm~() {
case "$1" in
"--dry-run")
find . -name "*~" -type f -printf "[dry-run] Removing file %p\n"
;;
"")
find . -name "*~" -type f -printf "Removing file %p\n" -delete
;;
*)
echo "Unsupported option \`$1'. Did you mean --dry-run?"
;;
esac
}
然后用作:
rm~ --dry-run
只显示将要删除的文件(但不删除它们),然后
rm~
当您对此感到满意时。
适应并扩展您的需求!
注意。您必须打开一个新终端才能使更改生效。