ฉันต้องการลบทุกไฟล์ แต่เก็บโครงสร้างโฟลเดอร์ไว้ มีวิธีหรือไม่?
หมายเหตุ: (ฉันใช้ GNU bash 4.1.5)
ฉันต้องการลบทุกไฟล์ แต่เก็บโครงสร้างโฟลเดอร์ไว้ มีวิธีหรือไม่?
หมายเหตุ: (ฉันใช้ GNU bash 4.1.5)
คำตอบ:
ลองสิ่งนี้:
find . ! -type d -exec rm '{}' \;
การดำเนินการนี้จะลบทุกไฟล์เดียวไม่รวมไดเรกทอรีด้านล่างไดเรกทอรีทำงานปัจจุบัน ระวังให้มากด้วยคำสั่งนี้
หากเวอร์ชันของfind
บนเครื่องของคุณรองรับคุณยังสามารถใช้
find . ! -type d -delete
find
คำสั่งไม่เคยเห็นเครื่องหมายอัญประกาศ มันเพิ่งเห็น{}
เครื่องหมายเป็นอาร์กิวเมนต์
-exec command {} +
" & นี้ " -exec command ;
" ฉันเคยใช้\;
ในอดีตไม่เคย '{}'
คุณสามารถใช้คำสั่งfind
เพื่อค้นหาทุกไฟล์ แต่บำรุงรักษาโครงสร้างไดเรกทอรี:
$ find /some/dir -type f -exec rm {} +
ตาม Unix & Linux คำถาม & คำตอบนี้: gnu ค้นหาและปิดบัง {} สำหรับเชลล์บางตัว - อันไหน? การหลบหนี{}
ด้วยเห็บเดี่ยว ( '
) ดูเหมือนจะไม่จำเป็นอีกต่อไปกับกระสุนสมัยใหม่เช่น Bash
วิธีง่ายๆในการลบไฟล์ปกติทุกไฟล์ในไดเรกทอรีปัจจุบันและไดเรกทอรีย่อยแบบเรียกซ้ำ:
zsh -c 'rm **/*(.)'
zsh เท่านั้นที่มีตัวระบุแบบกลมเพื่อจับคู่ไฟล์ตามประเภท อย่างไรก็ตามrm
คำสั่งไม่ทำงานในไดเรกทอรีดังนั้นในทุบตีคุณสามารถใช้
shopt -s globstar
rm **/*
สิ่งนี้ใช้ไม่ได้กับคำสั่งอื่นนอกเหนือจากrm
นี้ โดยทั่วไปคุณสามารถใช้find
:
find . -type f -delete
หรือถ้าคุณfind
ไม่สนับสนุน-delete
:
find . -type f -exec rm {} +
ฉันมีความต้องการที่คล้ายกันในการลบไฟล์ออกจากเส้นทางและไดเรกทอรีย่อย (กรองตามเวลา) โดยไม่ต้องลบโครงสร้างไดเรกทอรี
และฉันได้ใช้รูปแบบด้านล่างซึ่งใช้งานได้สำหรับฉัน
ค้นหา / test123 / home / test_file_hip / data / nfs -mtime +6 -type f -exec rm {} \;
Syntex: find (พา ธ ของไฟล์) -mtime (มากกว่าหรือน้อยกว่าวัน) -type f -exec rm {} \;
-type: พูดถึงชนิดของไฟล์ "f" สำหรับไดเรกทอรี "d" -exec: execute คำสั่ง rm: remove {}: เอาต์พุตของคำสั่ง find
หมายเหตุ: อย่าทดสอบก่อนใช้งาน โปรดแก้ไขหรืออัปเดตหากฉันพลาดอะไรเลย
find ... rm
โครงสร้างพื้นฐานได้รับการคุ้มครองแล้วฉันไม่แน่ใจว่านี่เป็นการสนับสนุนที่มีค่าสำหรับคำตอบใหม่สำหรับคำถามนี้