Alias bash Anda tidak ditulis dengan baik (tanda kutip tunggal tidak digunakan dengan baik). Sebaliknya seharusnya:
alias rm~='find . -name "*~" -print0 | xargs -0 /bin/rm -f'
Sekarang, saya pribadi tidak suka menggunakan pipa yang tidak berguna dan xargs
, jadi alias Anda akan lebih baik ditulis sebagai:
alias rm~='find . -name "*~" -type f -exec /bin/rm -fv -- {} +'
The -type f
pilihan sehingga untuk menemukan hanya file (tidak direktori, link, dll), -v
pilihan untuk rm
sehingga menjadi verbose (cetak apa menghapus itu). Itu +
di akhir sehingga find
berjalan rm
dengan semua file yang ditemukan (hanya memunculkan satu contoh rm
, bukan satu per file).
Sekarang dari man bash
:
Untuk hampir setiap tujuan, alias digantikan oleh fungsi shell.
Alih-alih alias, lebih baik menggunakan fungsi: komentari alias Anda di .bash_aliases
file (yaitu, letakkan #
di depan baris itu), dan di file .bashrc
, letakkan fungsi ini (di mana saja dalam file, pada akhirnya baik-baik saja) :
rm~() {
find . -name "*~" -type f -exec /bin/rm -fv -- {} +
}
Juga, seperti jawaban yang lain menyebutkan, Anda dapat menggunakan -delete
perintah untuk menemukan. Dalam hal ini, rm~
fungsi Anda adalah:
rm~() {
find . -name "*~" -type f -printf "Removing file %p\n" -delete
}
Bahkan, Anda dapat membuat fungsi keren yang akan mengambil argumen, katakanlah --dry-run
, yang hanya akan menampilkan apa yang akan dihapus:
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
}
Kemudian gunakan sebagai:
rm~ --dry-run
untuk hanya menampilkan file yang akan dihapus (tetapi tidak menghapusnya) lalu
rm~
ketika kamu senang dengan ini.
Sesuaikan dan luaskan dengan kebutuhan Anda!
Catatan. Anda harus membuka terminal baru agar perubahan diterapkan.