Как удалить все файлы внутри подпапок, но не сами подпапки?
Я знаю, как рекурсивно удалить все подпапки и все файлы. Но в этом случае мне нужно сохранить подпапки. По сути, мне нужно опустошить их все.
Так что я
rootdir/
subA/
subB/
subC/
subN/
И я хочу удалить все файлы внутри subA
в subN
, но без удаления subA
...subN
Что такое консольная команда для этого? Я думаю, это переключение на rm
4 ответа
Вы можете использовать find
команда для идентификации только обычных файлов (введите f
) рекурсивно
find rootdir -type f
Если это показывает ожидаемые результаты, то на самом деле удалить их
find rootdir -type f -delete
Обратите внимание, что это действительно удаление, а не "переход в корзину", поэтому будьте уверены на 100%, что это то, что вы действительно хотите сделать перед выполнением команды.
Основываясь на ответе Steeldriver, вы можете добавить xargs, чтобы в gvfs-trash был только один вызов. в его примере, find
позвоню gvfs-trash
один раз за каждый найденный файл find
, Это может быть медленно, если есть много файлов:
find . -type f -print0 | xargs -0 gvfs-trash
Вы также можете сделать это с rm
команда, но вам придется делать это неоднократно.
ты можешь первым cd
в родительский каталог с этим
cd /rootdir
после этого вам придется бежать
rm -rf ./folder/*
Замените папку именем папки, которую вы хотите очистить (например, subA).
Повторяйте это, пока все папки не станут пустыми.
Обратите внимание, что -rf
удалит также удалит все папки внутри папки, которую вы хотите очистить
Вы можете сделать это с -exec
как это: find rootdir -type f -exec rm {} \;
(обратите внимание, что обратная косая черта имеет важное значение)