นามแฝง 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
กับไฟล์ทั้งหมดที่พบ (spawns เพียงหนึ่งตัวอย่างของ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~
เมื่อคุณมีความสุขกับสิ่งนี้
ปรับและขยายความต้องการของคุณ!
บันทึก. คุณจะต้องเปิดเทอร์มินัลใหม่เพื่อให้การเปลี่ยนแปลงมีผล