Bí danh bash của bạn không được viết tốt (các trích dẫn đơn không được sử dụng tốt). Thay vào đó nên là:
alias rm~='find . -name "*~" -print0 | xargs -0 /bin/rm -f'
Bây giờ, cá nhân tôi không thích sử dụng các đường ống vô dụng và xargsvì vậy bí danh của bạn sẽ được viết tốt hơn là:
alias rm~='find . -name "*~" -type f -exec /bin/rm -fv -- {} +'
Các -type ftùy chọn để chỉ tìm thấy file (không phải thư mục, liên kết, vv), các -vtùy chọn để rmđể được tiết (in ra những gì nó xóa). Ở +cuối để findchạy rmvới tất cả các tệp được tìm thấy (chỉ sinh ra một thể hiện rm, thay vì một tệp cho mỗi tệp).
Bây giờ từ man bash:
Đối với hầu hết mọi mục đích, bí danh được thay thế bởi các hàm shell.
Thay vì bí danh, tốt hơn là sử dụng một hàm: bình luận bí danh của bạn trong .bash_aliasestệp (nghĩa là đặt một #dòng trước dòng đó) và trong tệp .bashrc, đặt hàm này (bất cứ nơi nào trong tệp, ở cuối tệp đều ổn) :
rm~() {
find . -name "*~" -type f -exec /bin/rm -fv -- {} +
}
Ngoài ra, như câu trả lời khác đề cập, bạn có thể sử dụng -deletelệnh để tìm. Trong trường hợp này, rm~chức năng của bạn sẽ là:
rm~() {
find . -name "*~" -type f -printf "Removing file %p\n" -delete
}
Trong thực tế, bạn có thể tạo một hàm tuyệt vời sẽ lấy một đối số, giả sử --dry-run, điều đó sẽ chỉ xuất ra những gì nó sẽ xóa:
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
}
Sau đó sử dụng như:
rm~ --dry-run
để chỉ hiển thị các tệp sẽ bị xóa (nhưng không xóa chúng) và sau đó
rm~
khi bạn hài lòng với điều này.
Thích nghi và mở rộng theo nhu cầu của bạn!
Ghi chú. Bạn sẽ phải mở một thiết bị đầu cuối mới để những thay đổi có hiệu lực.