Удалить файлы во всех каталогах в каталоге

Недавно мне нужно было удалить все файлы в ~40 каталогах, которые были в родительском каталоге, без удаления самих каталогов. Я закончил вручную, но есть ли более эффективный способ сделать это? Т.е. есть команда linux, которая может это сделать?

Для более четкой картины того, что я имею в виду:

HomeDirectoryName -> subdirectoryName -> 4 информационных файла симуляции

У меня был вышеуказанный путь, за исключением 40 подкаталогов, в каждой из которых есть 4 файла моделирования. Мне нужно было удалить все информационные файлы симуляции, не удаляя каталоги "subdirectoryName".

Это может быть невозможно, так как я искал повсюду около часа, прежде чем, наконец, решил сделать это вручную.

3 ответа

Решение

Это очень просто с find команда - просто используйте -type f найти только файлы, а не каталоги

find /path/to/parent/directory -type f -delete

По умолчанию, find возвращается в подкаталоги, поэтому найдет все файлы в дереве с этого момента.

Из родительского каталога запустить

find -type f -exec rm {} \;

для удаления каждого файла по отдельности или в качестве альтернативы

find -type f -exec rm {} +

поставить в очередь несколько файлов rm вовремя.

Для энтузиастов Python вот еще одно решение:

 python -c 'import os;[os.unlink(os.path.join(r,f)) for r,d,fs in os.walk(".") for f in fs]'

Из родительского каталога

rm */*

удалит 160 информационных файлов симуляции без удаления 40 каталогов, которые содержат файлы.

(В данном случае это не имеет значения, но в будущем может быть полезно знать, что rm никогда не удалит каталог, если вы явно не спросите его с помощью -r флаг.)

Другие вопросы по тегам