Làm thế nào để loại bỏ tất cả các thư mục con? (tập lệnh unix shell)

Jan 15 2021

Tôi có một thư mục tên là "cdrs-roaming". Mỗi ngày, tôi nhận được một hoặc nhiều tệp .zip và giải nén chúng bằng cách này:

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

Sau đó, tôi có ví dụ: "example1.zip" và "example1"; "example2.zip" và "example2"

Tôi đang xóa tất cả các tệp zip (trong trường hợp này là: "example1.zip" và "example2.zip") bằng tệp này:

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

Vì vậy, tôi muốn xóa các thư mục (hoặc các thư mục - tôi thực sự không biết sự khác biệt) "example1" và "example2". Tôi đã thử cái này:

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

Nhưng nó cũng loại bỏ "cdrs-roaming". Tôi cũng đã cố gắng sử dụng:

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

Nhưng nó trả về: find: '/ cdrs-roaming /': Không có tệp hoặc thư mục nào như vậy

Bất kỳ ý tưởng để làm điều này? Tôi chỉ cần xóa các thư mục trong "cdrs-roaming" nhưng tôi không thể xóa bất kỳ thứ gì khác bên trong nó (các tệp .sh của tôi nằm trong đó)

Trả lời

2 user1934428 Jan 15 2021 at 15:17

Vì bạn đang sử dụng bash, vậy còn

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

Dấu gạch chéo cuối cùng đảm bảo rằng bash chỉ mở rộng mẫu sang các thư mục.

1 TimurShtatland Jan 15 2021 at 05:27

Sử dụng -mindepth 1tùy chọn:

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