Допустим, у меня есть дерево каталогов, подобное этому:
FOLDER:
file1
file2
file3
Subfolder1:
file1
file2
Subfolder2:
file1
file2
Если бы я использовал rm -r FOLDER/*
, все в FOLDER было бы удалено, включая подкаталоги. Как я могу удалить все файлы в папке FOLDER и в ее подкаталогах, не удаляя актуальные каталоги?
Если ваша версия
find
не поддерживает,-delete
вы можете использовать следующее, чтобы удалить все файлы в текущем каталоге и ниже.источник
-exec rm {} +
будет быстрее, особенно если файлов много.find . ! -type d -exec rm {} +
удаляет ссылки sym также.find
не поддерживает,-delete
вероятно, тоже не поддерживает-exec ... {} +
. Рекомендуемый способ справиться с этимfind ... -print0 | xargs -r0 rm
(если ожидается много потенциальных совпадений).-exec ... {} +
это POSIX, но-delete
это не так. (-print0
Кстати, нет.)find
реализации, которые поддерживали,-print0
но не-exec ... {} +
(-delete
хотя я не помню о них ). Один был на OS X, другой на Solaris (несколько лет назад в очень консервативно обновленной системе). Вы также можете заменить-print0
на-printf '%p\0'
. В любом случае, это Ask Ubuntu, а не Unix & Linux, и Ubuntu использует GNU find с тех пор, как это было всегда.