จะลบไดเรกทอรีย่อยทั้งหมดได้อย่างไร? (unix เชลล์สคริปต์)

Jan 15 2021

ฉันมีไดเร็กทอรีชื่อ "cdrs-roaming" ทุกวันฉันได้รับไฟล์. zip อย่างน้อยหนึ่งไฟล์และแตกไฟล์ด้วยสิ่งนี้:

#!/bin/bash
for i in *.zip
do
    j=${i//\.zip/} mkdir $j
    cd $j unzip ../$i
    cd -
done 

จากนั้นฉันมีตัวอย่าง: "example1.zip" และ "example1"; "example2.zip" และ "example2"

ฉันกำลังลบไฟล์ zip ทั้งหมด (ในกรณีนี้คือ "example1.zip" และ "example2.zip") ด้วยสิ่งนี้:

#! /bin/bash
find /dados/cdrs-roaming/*.zip -mtime +1 -exec rm {} \;

ดังนั้นฉันต้องการลบไดเร็กทอรี (หรือโฟลเดอร์ - ฉันไม่รู้ความแตกต่างจริงๆ) "example1" และ "example2" ฉันได้ลองสิ่งนี้แล้ว:

#! /bin/bash
find /dados/cdrs-roaming/ -type d -mtime +1 -exec rm -rf {} \;

แต่ยังลบ "cdrs-roaming" ด้วย ฉันยังพยายามใช้:

find /cdrs-roaming/ -type d -mtime +1 -exec rm -rf {} \;

แต่ผลตอบแทน: find: '/ cdrs-roaming /': ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าว

มีความคิดที่จะทำสิ่งนี้หรือไม่? ฉันต้องการลบเฉพาะไดเร็กทอรีภายใน "cdrs-roaming" แต่ฉันไม่สามารถลบสิ่งอื่นใดในนั้นได้ (ไฟล์. sh ของฉันอยู่ข้างใน)

คำตอบ

2 user1934428 Jan 15 2021 at 15:17

เนื่องจากคุณใช้ bash แล้วล่ะ

rm -rf /dados/cdrs-roaming/*/

เครื่องหมายทับสุดท้ายช่วยให้มั่นใจได้ว่า bash จะขยายรูปแบบไปยังไดเร็กทอรีเท่านั้น

1 TimurShtatland Jan 15 2021 at 05:27

ใช้-mindepth 1ตัวเลือก:

find /dados/cdrs-roaming/ -mindepth 1 -type d -mtime +1 -exec rm -rf {} \;