Скажем, у меня есть дерево каталогов как это:
FOLDER:
file1
file2
file3
Subfolder1:
file1
file2
Subfolder2:
file1
file2
Если я использовал rm -r FOLDER/*
, все в ПАПКЕ было бы удалено включая подкаталоги. Как я могу удалить все файлы в ПАПКЕ и в ее подкаталогах, не удаляя фактические каталоги?
То, что Вы пытаетесь сделать, является рекурсивным удалением. Для этого Вам нужен рекурсивный инструмент, такой как find
.
find FOLDER -type f -delete
С bash
:
shopt -s globstar ## Enables recursive globbing
for f in FOLDER/**/*; do [[ -f $f ]] && echo rm -- "$f"; done
Сюда итерация по шарику развернула имена файлов и удаление только файлы.
Вышеупомянутое является пробным прогоном, если удовлетворенный изменениями, которые будут сделаны, удалите echo
для фактического удаления:
for f in FOLDER/**/*; do [[ -f $f ]] && rm -- "$f"; done
Наконец, сброс globstar
:
shopt -u globstar
<час> С zsh
, усиливая спецификатор шарика:
echo -- FOLDER/**/*(.)
(.)
спецификатор шарика, который ограничивает расширения шарика на просто регулярные файлы.
Вышеупомянутое просто распечатает имена файлов для фактического удаления:
rm -- FOLDER/**/*(.)
Если Ваша версия find
не поддерживает -delete
, можно использовать следующее для удаления каждого файла в текущем каталоге и ниже.
find . ! -type d -exec rm '{}' \;