Как удалить все файлы внутри подпапок, но не сами подпапки?

Я знаю, как рекурсивно удалить все подпапки и все файлы. Но в этом случае мне нужно сохранить подпапки. По сути, мне нужно опустошить их все.

Так что я

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 {} \; (обратите внимание, что обратная косая черта имеет важное значение)

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