Назад | Перейти на главную страницу

Рекурсивно удалять пустые папки с подробным выводом

Это должно быть довольно просто, но я не уверен, что мне не хватает.

Я бы хотел рекурсивно удалить пустые каталоги и получить вывод о том, что удаляется, эта команда точно работает, но я просто не могу подробно распечатать действия -excec.

while [ -n "$(find . -depth -type d -empty -exec rm -v -rf {} +)" ]; do :; done

по рекурсивно Я имею в виду, что я хочу продолжать удалять пустые папки, пока не останется другой пустой папки.

$ tree .
.
├── empty
│   └── empty
│       └── empty
└── non-emty
    └── ko

этот элемент удалит только одну пустую папку в дереве

$ find . -depth -type d -empty -exec rmdir -v {} +
rmdir: removing directory, `./empty/empty'

Вам не нужен цикл while, и вы должны использовать rmdir -p для удаления пустых родителей

find . -depth -type d -empty -exec rmdir -v -p {} + 
rmdir: removing directory, `./1/3'
rmdir: removing directory, `./1'
rmdir: removing directory, `.'
rmdir: failed to remove directory `.': Invalid argument
rmdir: removing directory, `./2/3'
rmdir: removing directory, `./2'
rmdir: failed to remove directory `./2': Directory not empty

Причина, по которой вы не видите вывод своей команды, заключается в том, что вы запускаете ее в подоболочке $(...) но ничего не делая с возвращенным выводом, вы можете поместить эхо перед подзапросом, чтобы распечатать то, что он возвращает

echo $(find . -depth -type d -empty -exec rmdir -v -p {} +)
rmdir: removing directory, `./1/3' rmdir: removing directory, `./1' rmdir: removing directory, `.' rmdir: removing directory, `./2/3' rmdir: removing directory, `./2'