Как удалить все подкаталоги? (сценарии оболочки 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 {} \;