สิ่งที่ฉันได้ใกล้เคียงที่สุดคือ
# rm /path/to/directory/*.*
แต่มันใช้ไม่ได้กับไฟล์ที่ไม่มีนามสกุล ...
สิ่งที่ฉันได้ใกล้เคียงที่สุดคือ
# rm /path/to/directory/*.*
แต่มันใช้ไม่ได้กับไฟล์ที่ไม่มีนามสกุล ...
คำตอบ:
Linux ไม่ใช้ส่วนขยาย มันขึ้นอยู่กับผู้สร้างไฟล์ที่จะตัดสินใจว่าเขาต้องการให้ชื่อมีนามสกุลหรือไม่ Linux มองไปที่ไบต์ที่ 1 เพื่อค้นหาว่าไฟล์นั้นเกี่ยวข้องกับอะไร
ในการลบทุกอย่างในไดเรกทอรีให้ใช้:
rm /path/to/directory/*
คุณสามารถใช้-r
ตัวเลือกตัวอย่างเช่น:
rm -r /path/to/directory/*
เพื่อลบไดเรกทอรีย่อยใด ๆ (รวมถึงเนื้อหาทั้งหมด) ภายในไดเรกทอรีที่คุณลบเนื้อหาของ มิฉะนั้นจะแสดงข้อผิดพลาดแจ้งให้คุณทราบว่าไม่ได้ลบไดเรกทอรี
all files
) *.*
หมายถึงไฟล์ทั้งหมดที่มีชื่อ.
อยู่ในนั้น
*a*
หมายถึงอักขระที่เป็นศูนย์หรือมากกว่าตามด้วยa
ตามด้วยอักขระศูนย์หรือมากกว่า มันจะตรงกับชื่อไฟล์happy
, apple
, หรือa
la
วิธีลบโฟลเดอร์ที่มีเนื้อหาทั้งหมด ( รวมถึงโฟลเดอร์ภายในทั้งหมด ):
rm -rf /path/to/directory
หากต้องการลบเนื้อหาทั้งหมดของโฟลเดอร์ ( รวมถึงโฟลเดอร์ภายในทั้งหมด ) แต่ไม่รวมถึงโฟลเดอร์:
rm -rf /path/to/directory/*
หรือ
rm -rf /path/to/directory/{*,.*}
หากคุณต้องการแน่ใจว่าไฟล์ / ไดเรกทอรีที่ซ่อนอยู่นั้นถูกลบด้วย
ในการลบ "ไฟล์" ทั้งหมดออกจากภายในโฟลเดอร์ ( ไม่ลบโฟลเดอร์ภายใน ):
rm -f /path/to/directory/{*,.*}
คำเตือน : หากคุณมีช่องว่างในเส้นทางของคุณให้ใช้เครื่องหมายคำพูดเสมอ
rm -rf /path/to the/directory/*
เทียบเท่ากับการrm -rf
โทรแยกกัน 2 สาย:
rm -rf /path/to
rm -rf the/directory/*
เพื่อหลีกเลี่ยงปัญหานี้คุณสามารถใช้'
เครื่องหมายคำพูดเดี่ยว'
( ไม่ขยายตัวแปรเชลล์) หรือ"
เครื่องหมายคำพูดคู่"
( ขยายตัวแปรเชลล์):
rm -rf "/path/to the/directory/"*
ที่ไหน:
rm
- ย่อมาจาก " remove "-f
- ย่อมาจาก " force " ซึ่งมีประโยชน์เมื่อคุณไม่ต้องการให้ถาม / ถามหากคุณต้องการลบไฟล์เก็บถาวร-r
- ย่อมาจาก " recursive " ซึ่งหมายความว่าคุณต้องการลบไฟล์ซ้ำทุกโฟลเดอร์และลบทุกอย่างออกrm -rf /path/to/directory/*
.htaccess
ไม่ลบไฟล์ที่ซ่อนอยู่ในเช่นโฟลเดอร์ อาจจะrm -rf /path/to/directory/.
? ยังไม่ได้ลอง
rm -rf /path/to/directory/.*
ลบเฉพาะไฟล์ที่ซ่อนอยู่ในไดเรกทอรีที่ระบุเท่านั้น มองไปที่ความคิดเห็นของ @ danjjl บน @ คำตอบ Rinzwind ของการลบไฟล์ที่ซ่อนอยู่เรียกใช้ก่อนที่จะใช้shopt -s dotglob
rm -rf /path/to/directory/*
rm -rf /path/to/directory/.*
/path/to
โชคดีที่ฉันเพิ่งสำรองข้อมูลทั้งหมดของฉันไปยังดิสก์ที่แยกต่างหาก ไม่จำเป็นต้องพูดออกคำสั่งrm -rf /path/to/directory/.*
เว้นแต่คุณจะสำรองข้อมูลคอมพิวเตอร์ทั้งหมดของคุณไปยังตำแหน่งที่แยก / ปลอดภัย!
ในการลบไฟล์ทั้งหมดในไดเรกทอรี (รวมถึงไฟล์ที่ซ่อนอยู่และไดเรกทอรีย่อย) ให้รัน:
rm -rf /path/to/directory/{*,.*}
./
และ../
แต่ก็ยังจะลบไฟล์ที่ซ่อนอยู่
rm -r $(pwd)/{*,.*}
หากคุณต้องการลบเฉพาะไฟล์ใน / path / to / directory คุณสามารถทำได้
find /path/to/directory -type f -print0| xargs -0 rm
หรือ
find /path/to/directory -type f -exec rm '{}' \;
คุณสามารถโหลดด้วยfind
ข้อดีคือคุณสามารถแสดงรายการสิ่งที่พบโดยไม่ต้องไปป์เพื่อrm
ให้คุณสามารถดูสิ่งที่จะถูกลบก่อนที่จะเริ่ม
GNU find
เป็นภาค-delete
แสดง หากคุณยังต้องการใช้การ-exec
แทนที่\;
ด้วย+
จะรวบรวมrm
สายเข้าด้วยกันเพื่อเพิ่มประสิทธิภาพ
ในการลบไฟล์และไดเรกทอรีทั้งหมด (รวมถึงไฟล์ที่ซ่อนอยู่ ) ในไดเรกทอรีคุณสามารถลองทำสิ่งต่อไปนี้:
ลบโฟลเดอร์จากนั้นสร้างใหม่
rm -rf dir_name && mkdir dir_name
ใช้ find
find dir_name -mindepth 1 -delete
ที่นี่เราระบุ-mindepth 1
เพื่อแยกไดเรกทอรี dir_name เอง
ลองดูที่ลิงค์ต่อไปนี้:
https://unix.stackexchange.com/questions/12593/how-to-remove-all-the-files-in-a-directory
rm -rf /path/to/directory
หากคุณยังต้องการที่จะลบไดเรกทอรีย่อยทั้งหมดและไดเรกทอรีตัวเองคุณสามารถใช้ แต่ตรวจสอบสายของคุณอีกครั้งก่อนกดกลับเสมอrm -rf
อาจทำให้เกิดความยุ่งเหยิงมากมายเช่นถ้าคุณเผลอแทรกช่องว่างหลังจากสแลชแรกในขณะที่มีสิทธิ์ superuser ...
เนื่องจากคำถามนี้อยู่ด้านบนของ Google อย่างต่อเนื่องเมื่อฉันค้นหาด้วยตัวเอง:
คำตอบอื่น ๆ ประสบปัญหาที่แตกต่าง:
บางคนรวมถึง.
และ..
ที่มีเสียงดังสับสนและน่ารำคาญ
บางคนลืมไฟล์ที่ซ่อน (ไฟล์ที่ขึ้นต้นด้วยจุด)
พวกเขาจะไม่ลบในลำดับที่ถูกต้อง (ลึกที่สุดก่อน) เพื่อให้การลบไดเรกทอรี
พวกเขาลงไปในระบบไฟล์อื่น ๆ (ติดตั้ง) ซึ่งมักจะไม่พึงประสงค์
พวกมันขยายได้ยากด้วยพารามิเตอร์พิเศษ (เพิ่มเติมจากด้านล่าง)
find "${DIR}" -xdev -mindepth 1 -printf "%d\t%y\t%p\0" | sort -z -r -n | cut -z -f3- | xargs -0 -r -- rm -d --
โปรดทราบว่าฉันได้เพิ่มการ-xdev
โต้แย้งเพื่อป้องกันไม่ให้ลงไปในเมานท์ (เช่น/proc
ฯลฯ )
-depth
หรือ-delete
?แม้จะมีคนลงคะแนนฉันอย่างต่อเนื่องสำหรับวิธีการเหล่านี้มีข้อเสีย: ดูเหมือนว่าพวกเขาไม่สามารถขยายพอที่จะอนุญาตให้-prune
ไดเรกทอรีย่อย (โดยไม่ต้องแนะนำปัญหาเพิ่มเติม) ตรงกันข้ามกับวิธีนี้คุณสามารถแทรก
-not \( -path "${DIR}/subdir" -prune \)
ก่อนที่-mindepth
อาร์กิวเมนต์จะแยกsubdir
ออกจากการลบเนื้อหา
-depth
ธงในfind
การที่
-delete
ด้วยfind
ล่ะ? -delete
คือความลึกก่อน คุณได้สมมติว่าไม่ใช่ POSIX find
ด้วย-printf
ดังนั้นคุณอาจใช้-delete
หรือ-depth -print0 | xargs -0 rm
-not \( -path "$DIR/subdir" \)
... แต่ฉันจะทำอย่างไร ทำไม?
คุณสามารถcd
เข้าไปในไดเรกทอรีแล้วเรียกใช้คำสั่งrm *.*
เหมือนกับใน DOS ถ้าคุณจำได้
หากต้องการลบไดเรกทอรีปัจจุบันคุณสามารถใช้ตัวอย่างเช่น rm -d ./*
-d บอกให้ลบไดเรกทอรีเช่นกัน
shopt -s dotglob
ก่อนที่จะรันrm (...)