ฉันจะลบไฟล์ทั้งหมดที่มีชื่อที่กำหนดในไดเรกทอรีย่อยทั้งหมดได้อย่างไร


25

ฉันต้องการลบไฟล์ทั้งหมดที่มีชื่อที่กำหนดในไดเรกทอรีย่อยทั้งหมดของโฮมไดเร็กตอรี่ของฉัน

ฉันเหนื่อย:

rm -r file

ในโฮมไดเร็กตอรี่ของฉัน, แต่มันไม่ทำงานเพราะไฟล์นั้นไม่มีอยู่ในไดเรกทอรีนั้น.

คำตอบ:



12

เนื่องจากคำตอบของ @ tante อย่างละเอียดคุณอาจต้องการให้รายการไฟล์ที่ใช้นั้นถูกต้องก่อนที่จะลบไฟล์เหล่านั้น:

find <source_dir> -name <filename> -print

หากการตรวจสอบแสดงรายการที่ถูกต้องแล้ว

find <source_dir> -name <filename> -delete

ตัวเลือกอื่นหากต้องการสิ่งนี้ในหลาย ๆ ไดเรกทอรีโดยใช้ไดเร็กทอรีการพักชั่วคราว:

mkdir <dest_dir>
for i in <list_of_directories>
do
  find "$i" -name <filename> -exec /bin/mv {} <dest_dir>
done

# check dest_dir
ls dest_dir
rm -rf <dest_dir>

เช่นเคยโปรดตรวจสอบความถูกต้องของสคริปต์ใด ๆ ก่อนดำเนินการและมีการสำรองข้อมูลอยู่เสมอในกรณีที่มีข้อผิดพลาดเกิดขึ้น


3
ใส่เครื่องหมายคำพูดคู่ล้อมรอบการแทนที่ตัวแปรเสมอมิฉะนั้นคำสั่งของคุณจะไม่ทำงานกับชื่อไฟล์ที่มีอักขระพิเศษบางตัว (ช่องว่าง, ไวด์การ์ด, ไวด์การ์ดและแบ็กสแลช)
Gilles 'หยุดความชั่วร้าย'

@Gilles - ใช่ขอบคุณสำหรับการอัพเดทและทำให้มั่นใจว่าคำตอบนี้ถูกต้อง
Wayne
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.