Ваш псевдонім 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~
коли ти задоволений цим.
Адаптувати та розширити під свої потреби!
Примітка. Вам потрібно буде відкрити новий термінал, щоб зміни вступили в силу.