Удалить файлы во всех каталогах в каталоге
Недавно мне нужно было удалить все файлы в ~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
флаг.)