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à xargs
vì 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 f
tùy chọn để chỉ tìm thấy file (không phải thư mục, liên kết, vv), các -v
tùy chọn để rm
để được tiết (in ra những gì nó xóa). Ở +
cuối để find
chạy rm
vớ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_aliases
tệ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 -delete
lệ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.