Ваш псевдоним 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
:
Почти для любых целей псевдонимы заменяются функциями оболочки.
Вместо псевдонима лучше использовать функцию: закомментируйте свой псевдоним в .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~
когда ты доволен этим.
Адаптируйся и расширяй свои потребности!
Заметка. Вам нужно будет открыть новый терминал, чтобы изменения вступили в силу.