Я хочу удалить содержимое папки и ее подпапки, не удаляя скрытые файлы в папке и подпапках. Как я могу сделать это с помощью сценария оболочки ??
Я пробовал rm -rf foldername
но он удаляет все содержимое.
Вместо использования -exec
или xargs
вы можете просто сделать:
find folder_name -not -name ".*" -delete
.
(скрытые файлы / папки)Это сложно. Общее решение может быть:
find foldername -type f ! -name '.*' -exec rm -f {} +
find foldername -type d -depth -exec rmdir {} + 2>/dev/null
Первая команда удаляет файлы с именем, не начинающимся с .
; вторая пытается удалить каталоги. Опция -depth
означает удаление подкаталогов перед удалением каталогов. Знак +
взят из POSIX 2008 find
но отлично работает на Mac OS X (10.7.5, в любом случае). 2>/dev/null
отправляет любые сообщения об ошибках «директория не пуста» (и, действительно, все остальные) в забвение.
Вы можете столкнуться с проблемами с символическими ссылками, сокетами Unix, FIFO и другими не-файлами; настроить первую команду в соответствии с вашими требованиями. Если вы используете !
для истории, вам может понадобиться избежать этого.
Передав аргумент -name "*"
команде find
, по умолчанию все скрытые файлы будут удалены. Поэтому вы можете использовать приведенную ниже команду.
find . -name "*"|xargs rm -f
Вы можете использовать эту команду:
find foldername/ -type f -not -name '.*' | xargs rm -f
Команда find находит все файлы с именем foldername/, имена которых не начинаются с символа '.' (скрытый файл) и передает их в xargs, который запускает для них команду rm -f.