bash - ลบไดเรกทอรีทั้งหมด (และเนื้อหา) แต่ไม่ใช่ไฟล์ใน pwd


19

ฉันต้องการลบไดเรกทอรีทั้งหมดจาก pwd แต่ทิ้งไฟล์ไว้ใน pwd เพียงอย่างเดียว หากเนื้อหาของ pwd ของฉันคือ:

mydir1
mydir2
myfile1
myfile2

ถ้าอย่างนั้นฉันก็อยากจะเหลืออยู่

myfile1
myfile2

ฉันคิดว่าฉันต้องใช้ rm -r -i

ฉันถูกไหม?

คำตอบ:


10

ไม่ว่าจะให้ "ตัวถูกดำเนินการหายไป" เนื่องจากคุณไม่ได้ระบุอะไรเลย การใส่*จะแจ้งให้ไฟล์

ฉันจะลองทำ:

find -mindepth 1 -maxdepth 1 -type d -exec rm -r {} \;

mindepth 1จะยกเว้น.จากผลการที่maxdepth 1จะไม่รวมการพยายามที่จะทำภายใต้ไดเรกทอรีที่จะอยู่แล้วได้รับการลบ (จึงสร้างคำเตือน) แต่ในทางปฏิบัติคุณสามารถปล่อยให้พวกเขาทั้งคู่ออกมาถ้าคุณเห็นด้วยกับคำเตือนที่ "ไร้เดียงสา"


21

ฉันพบสิ่งนี้ที่ใดที่หนึ่ง:

rm -r */

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


1
ที่จะติดตามลิงก์สัญลักษณ์ซึ่งอาจไม่ต้องการที่นี่มาก
JdeBP

8

ใช้

rm -rf ./*/

ที่หลีกเลี่ยงโหมดการโต้ตอบและลบไดเรกทอรีในไดเรกทอรีท้องถิ่นของคุณเท่านั้น


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


-1
you can also try in this way to delete only all folders not files from any location in linux.

    #delete only all dir and don't touch files
    #!/bin/bash
    for dir in `ls -l | grep ^d | awk '{print $9}'`
    do
    echo "going to delete $dir " `rm -rf $dir`
    done
    ls
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.