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

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

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

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, и мы попадаем в несуществующий каталог. Это очень уродливо.

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

  • Сценарии - Папки с пробелами
  • Cron Job: перенаправление вывода сценария оболочки в файл
  • Как осуществляется перенаправление?
  • Rsync два типа файлов в одной команде?
  • Как вы получаете первый файл в каждом подкаталоге, соответствующем списку расширений файлов?
  • Мне нужны данные из файла csv, которого нет во втором файле csv
  • другая оболочка для пользователя root и non-root
  • Почему две почти idetic команды grep возвращают разные выходные данные: w / o и с именем файла
  • Как я могу заставить pwd разрешить мягкую ссылку?
  • Передавать аргументы команде, запущенной другим пользователем
  • Запустите команду Vim из сценария bash
  • Linux и Unix - лучшая ОС в мире.