ลบโฟลเดอร์ย่อยโดยไม่ต้องลบโฟลเดอร์หลัก


15

สำหรับโครงสร้าง dir ประเภทนี้:

/config/filegroups/filegroupA/files/fileA1.txt
/config/filegroups/filegroupA/files/fileA2.txt
/config/filegroups/filegroupB/files/fileB1.txt
/config/filegroups/filegroupB/files/fileB2.txt
...

ฉันรู้ว่าฉันสามารถใช้rm -rf /config/filesgroupsเพื่อลบโฟลเดอร์หลักและโฟลเดอร์ย่อยทั้งหมด ...

แต่ผมต้องการที่จะลบเฉพาะ/filegroupA, /filegroupBฯลฯ และไม่ลบ/config/filegroups


13
มีปัญหาในการใช้ rm -rf / config / filesgroups / * หรือไม่?
dsmsk80

3
หรือแม้กระทั่งrm -rf /config/filegroups/filegroups{A,B}?
Drav Sloan

@dsumsky โดยค่าเริ่มต้นbashจะไม่รวม '.' โฟลเดอร์ในการขยายชื่อพา ธ ซึ่งอาจหรืออาจจะไม่ต้องการ ตัวเองที่ฉันทำshopt -s dotglobใน.bashrcการแก้ไขว่า เพียงบันทึกด้านข้างที่ใครบางคนอาจพบว่ามีประโยชน์;)
Miroslav Koškár

มีอะไรให้คุณทำงานบ้างไหม? ถ้าเป็นเช่นนั้นคุณจะยอมรับคำตอบเพื่อช่วยเหลือผู้อื่น (เปรียบฉัน) ที่ต้องการทำสิ่งเดียวกันหรือไม่?
Mawg กล่าวว่าคืนสถานะโมนิก้า

rm -rf /*จะทำ;) --- อย่าทำอย่างจริงจัง
Muhammad Umer

คำตอบ:


28
rm -rf /config/filegroups/*

หากคุณต้องการลบเฉพาะไดเรกทอรี (และ symlink ไปยังไดเรกทอรี) โดยปล่อยให้ไฟล์ใด ๆ อยู่ในสภาพที่/config/filegroupsไม่มีการแตะต้องคุณสามารถใช้เครื่องหมายสแลชต่อท้าย:

rm -rf /config/filegroups/*/

หากคุณต้องการลบไดเรกทอรีที่มีชื่อขึ้นต้นด้วย.เช่นกันสมมติว่าคุณมีทุบตีค่อนข้างเร็วคุณควรใช้ตัวเลือก dotglob shell:

shopt -s dotglob
rm -rf /config/filegroups/*/
shopt -u dotglob

และโปรดอย่าว่ามันจะไม่ทำงานสำหรับ rm -rf "/ config / filegroups / *"
Ilya Yevlampiev

5

การดำเนินการนี้จะลบไฟล์และไดเรกทอรีทั้งหมดภายใต้/config/filegroupsรวมถึงไฟล์และไดเรกทอรีที่"ซ่อน" (ชื่อที่ขึ้นต้นด้วย.)

find /config/filegroups -mindepth 1 -maxdepth 1 | xargs rm -rf

หากชื่อไฟล์หรือไดเรกทอรีมีช่องว่างคุณต้องทำเช่นนี้:

find /config/filegroups -mindepth 1 -maxdepth 1 -print0 | xargs -0 rm -rf

โบนัส: คุณสามารถตรวจสอบสิ่งที่จะถูกลบเช่นนี้ก่อน:

find /config/filegroups -mindepth 1 -maxdepth 1

หากคุณต้องการเก็บไฟล์หรือไดเรกทอรีบางอย่างคุณสามารถทำสิ่งนี้ได้:

find /config/filegroups -mindepth 1 -maxdepth 1 -not -name "keep"

มีเหตุผลที่จะไม่ใช้ใด ๆfindของ-deleteตัวเลือก?
evilsoup

4
-deleteปฏิเสธที่จะลบไดเรกทอรีที่ไม่ว่างเปล่า -maxdepthแทนที่-depthซึ่งจำเป็น-deleteสำหรับการลบไดเรกทอรีที่ไม่ว่างเปล่า หากไม่มี-maxdepthคุณจะไม่สามารถเห็นได้อย่างง่ายดายว่าจะลบไดเรกทอรีใดเพราะจะแสดงรายการไฟล์ในไดเรกทอรีด้วย ไม่ได้ใช้ยังหมายความว่าคุณไม่สามารถใช้ฟิลเตอร์เช่น-maxdepth -nameนอกจากนี้การ-deleteลบไดเรกทอรีโดยการลบวัตถุทั้งหมดภายในแรกซึ่งอาจใช้เวลานานถ้ามันเป็นต้นไม้ใหญ่และลึก
lesmana

4

ฉันชอบที่จะใช้findกับ-execที่จะทำให้การโทรของคุณเช่นนี้:

find /config/filegroups/ -maxdepth 1 -mindepth 1 -type d -exec rm -rf {} \;

-2

หากคุณอยู่ในโฟลเดอร์คุณสามารถพิมพ์ได้ rm -rf ./**

ดังนั้น:

cd /config/filesgroups
rm -rf ./**

นี่เป็นรูปแบบแบบกลมเพื่อลบโฟลเดอร์ย่อยทั้งหมดออกจากเส้นทางในเครื่อง ..

./อ้างถึงโฟลเดอร์ในระบบ ... และ**สำหรับโฟลเดอร์ทั้งหมดที่อยู่ด้านล่าง ..


1
โฟลเดอร์ไหนและทำไม `** ''
RalfFriedl

1
สิ่งนี้จะเหมือนกันrm -rf ./*ทุกประการยกเว้นว่าคุณมีแนวโน้มที่จะได้รับข้อความวินิจฉัยเกี่ยวกับ "ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว" หากคุณไม่ได้ใช้-fในคำสั่งของคุณ (เนื่องจากไดเรกทอรีบนสุดจะถูกลบซ้ำ ๆ ก่อนประมวลผลเนื้อหา โดยrm)
Kusalananda
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.