удалять содержимое каталога элегантным способом

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

У меня есть несколько файлов, каталогов и некоторые из них начинаются с точки, например:

touch .abc; touch abcd ; mkdir foobar; touch "file name" "#" 

Я ищу posix-совместимое, элегантное решение, чтобы сделать этот каталог пустым. Я опубликую некоторые из своих идей, но ни один из них не идеален.

8 Solutions collect form web for “удалять содержимое каталога элегантным способом”

 rm -rf -- * .* 

Это портативный и работает, но он уродлив, потому что, кроме zsh , он выдает предупреждения:

 rm: cannot remove directory: `.' rm: cannot remove directory: `..' 

Попробуй это:

 find . -maxdepth 1 -not -name \. -exec rm -rf \{\} ; 

POSIXly:

 rm -rf -- * .[!.]* ..?* 

Это может потерпеть неудачу, если список файлов слишком велик, это не будет:

 find . ! -name . -prune -exec rm -rf {} + 

С zsh :

 rm -rf -- *(D) 

Лучшее решение, которое я нашел, это:

 find . -delete 

однако, -пределить предикат является рискованным (см. man), и я не люблю его использовать.

Обновить:

Мне не нравится -delete предикат, потому что это может вызвать катастрофу, когда ее использует кто-то, не знакомый с деталями логики поиска. Например:

 find . -delete -name '*.bak' # DO NOT DO IT!!! 

Кто-то может ожидать, что такой вызов удалит только файлы «* .bak», но он точно эквивалентен find . -delete find . -delete .

как насчет

  rm -rf * .[az]* .[AZ]* .[0-9]* 

это будет работать? или у вас есть другие шаблоны имен файлов, чтобы они совпадали?

другой вариант – запомнить значение pwd , cd .. , rm -rf в каталоге и воссоздать каталог. Это также уродливо по многим причинам.

Кстати, пожалуйста, не голосуйте. Прокомментируйте, если необходимо.

Сначала удалите файлы, а затем пустые каталоги:

 find . -type f -exec rm \{\} \; find . -depth -type d -empty -exec rmdir \{\} \; 
 rm -rf . 

Это, конечно, не работает вообще, однако это:

 rm -rf -- "$PWD" 

удаляет CWD, и мы попадаем в несуществующий каталог. Это очень уродливо.

Кстати, пожалуйста, не голосуйте. Прокомментируйте, если необходимо.

  • Почему результат этого цикла for и while отличается?
  • Хороший «индикатор прогресса» о проверке прогресса md5sum?
  • Файлы Cat 2 и избегайте дублирования строк
  • git diff - прослушивание нажатия клавиши
  • Как обмениваться словами в имени файла с помощью оболочки?
  • SSH для хоста и введите пароль со сценарием оболочки
  • awk и новые строки во входных данных
  • Как удалить скрытую папку?
  • путают о двойном цитировании
  • проблема с find -exec cp
  • Уменьшить резервный файл журнала
  • Linux и Unix - лучшая ОС в мире.