ฉันจะลบทุกสิ่งในไดเรกทอรีได้อย่างไร


25

ฉันจะลบทุกสิ่งในไดเรกทอรีรวมถึงไฟล์และไดเรกทอรีที่ซ่อนอยู่ได้อย่างไร

ตอนนี้ฉันใช้สิ่งต่อไปนี้:

rm -rf *
rm -rf .*

5
rm -rf .* *คุณสามารถรวมพวกเขาไป
ผู้ใช้ที่ไม่รู้จัก

2
คุณสามารถไปหนึ่งไดเรกทอรีแล้วเรียกใช้rm -rf yourdirectory/*
shreyansp

1
ขอโทษพลาดส่วนไดเรกทอรีที่ซ่อนอยู่ โซลูชันของผู้ใช้ก่อนหน้านี้ครอบคลุม
shreyansp

ตัวเลือกที่สองที่คุณโพสต์นั้นอันตรายมาก มันจะตรงกับ..ไดเรกทอรีซึ่งจะลบสิ่งที่อยู่ในไดเรกทอรีดังกล่าวข้างต้น
Richard Peterson

คำตอบ:


17

ง่ายและตรงไปตรงมา:

find -delete 

รวมถึงไดเรกทอรีและไฟล์ที่ซ่อนอยู่ อย่างน้อย gnu-find รู้-deleteของคุณfindอาจแตกต่างกัน


1
find /path -delete -mindepth 1เพื่อหลีกเลี่ยงการลบไดเรกทอรีการใช้งาน
orodbhen

@orodbhen: find -delete จะไม่ลบไดเรกทอรีที่คุณเรียกใช้คำสั่ง (เช่นในคำถามด้วย rm)
ผู้ใช้ที่ไม่รู้จัก

11

คำตอบที่ดีที่สุดคืออย่าทำอย่างนั้น ลบไดเรกทอรีซ้ำซ้ำแล้วสร้างเป็นไดเรกทอรีว่าง มันน่าเชื่อถือและง่ายขึ้นสำหรับคนอื่นที่จะเข้าใจสิ่งที่คุณกำลังพยายามทำ เมื่อคุณสร้างไดเรกทอรีใหม่อาจมีเจ้าของกลุ่มและสิทธิ์ต่างกัน หากสิ่งเหล่านั้นสำคัญควรระวัง นอกจากนี้หากโปรแกรมใด ๆ ที่ทำงานอยู่มีตัวจัดการไฟล์เปิด (ตัวอธิบาย) ในไดเรกทอรีคุณจะไม่ต้องการลบมัน หากไม่ใช้กรณีพิเศษเหล่านั้นจะเป็นการง่ายกว่าที่จะลบไดเรกทอรีทั้งหมด


7
ดังนั้นวิธีที่ง่ายขึ้น 'ระวัง' ไม่ใช่คำตอบ ฉันจะไม่เข้าใจว่าทำไมบางคนลบไดเรกทอรีและสร้างใหม่อีกครั้ง
ผู้ใช้ที่ไม่รู้จัก

ฉันเพิ่มวลี "เป็นไดเรกทอรีว่าง" บางทีอาจจะชัดเจนกว่านี้
Chris Quenelle

2
ไม่มันไม่ได้อธิบายว่าทำไมคุณจึงลบไดเรกทอรีและสร้างมันขึ้นมาใหม่ สำหรับสิ่งที่ต้องพิจารณาเป็นของ btw., วันที่ / เวลาของการสร้างด้วย
ผู้ใช้ที่ไม่รู้จัก

2
หากไดเรกทอรีนั้นเป็นไดเรกทอรีการทำงานปัจจุบันของบางกระบวนการคุณอาจพบปัญหา นอกจากนี้หากคุณลบไดเรกทอรีคุณจะลบข้อมูลเกี่ยวกับสิทธิ์และความเป็นเจ้าของ

8
rm -rf -- * .[!.]* ..?*

รูปแบบทั้งสามรูปแบบขยายออกไปหากมันไม่ตรงกับสิ่งใด แต่นั่นไม่ใช่ปัญหาที่นี่เนื่องจากเราต้องการจับคู่ทุกอย่างและrm -fละเว้นอาร์กิวเมนต์ที่ไม่มีอยู่

โปรดทราบว่าจะตรงกับ.*..


5

สมมติว่าทุบตี 4+:

shopt -s dotglob
rm -rf -- *
##or:
rm -rf ./*

ด้วย dotglob เปิดใช้งาน*ขยายไฟล์และไดเรกทอรีทั้งหมดแม้กระทั่งผู้ที่เริ่มต้นด้วย.- แต่ไม่ได้ขยายตัวออกไป.และเพื่อให้มันมีความปลอดภัยที่จะใช้กับ..rm



2

โอ้ฉัน Zsh

rm -rf (.|)*

อีกครั้งสำหรับ Zsh เท่านั้น


2
หรือ*(D)(ตัวระบุแบบDกลมเปิดใช้glob_dotsตัวเลือกสำหรับรูปแบบนี้)
Gilles 'หยุดความชั่วร้าย'

หรือrm -rf {.,}*(แตกต่างจากทุบตี, zsh ไม่รวม.และ..เป็น{.,}*อย่างน้อยในเครื่องของฉัน)
sasha

1

findวิธีการเกี่ยวกับการใช้ ฉันคิดว่านี่เป็นทางเลือกที่ดีเมื่อคุณต้องขุดผ่านไดเรกทอรีย่อย

find . -type f -exec rm {} \;

1
มีสวิตช์ -delete เพื่อให้คุณสามารถลบไดเรกทอรี (อย่างน้อยก็ใน gnu-find)
ผู้ใช้ที่ไม่รู้จัก

นี่จะไม่ลบไดเรกทอรีย่อย
sasha

-2

ลองrm -rf *?*ดู นี่จะเป็นการลบไฟล์ปกติและไฟล์ที่ซ่อนอยู่


4
ไม่ได้อยู่ในเปลือกที่ฉันรู้
Gilles 'หยุดชั่วร้าย'

คุณถูก. มันไม่ได้ลบไดเรกทอรีย่อย
gladimdim

4
ปัญหาน่าจะมากกว่าที่*?*จะไม่ตรงกับไฟล์ "จุด" / dirs (ยกเว้นว่าคุณได้เปิดใช้งานdotglobตัวเลือกในbash , GLOB_DOTSตัวเลือกในzshหรือเทียบเท่ากับเชลล์ที่คุณใช้อยู่)
Chris Johnsen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.