3

Я хочу удалить содержимое папки и ее подпапки, не удаляя скрытые файлы в папке и подпапках. Как я могу сделать это с помощью сценария оболочки ??

Я пробовал rm -rf foldername но он удаляет все содержимое.

4 ответа4

3

Вместо использования -exec или xargs вы можете просто сделать:

find folder_name -not -name ".*" -delete
  • Это удаляет все файлы и папки, которые не начинаются с . (скрытые файлы / папки)
  • Это удаляет папки, если и только если они пусты (поэтому не будет удалять папки, содержащие скрытые файлы, как требуется)
2

Это сложно. Общее решение может быть:

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 и другими не-файлами; настроить первую команду в соответствии с вашими требованиями. Если вы используете ! для истории, вам может понадобиться избежать этого.

1

Передав аргумент -name "*" команде find , по умолчанию все скрытые файлы будут удалены. Поэтому вы можете использовать приведенную ниже команду.

  find . -name "*"|xargs rm -f
0

Вы можете использовать эту команду:

find foldername/ -type f -not -name '.*' | xargs rm -f

Команда find находит все файлы с именем foldername/, имена которых не начинаются с символа '.' (скрытый файл) и передает их в xargs, который запускает для них команду rm -f.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .