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

Каким образом можно удалить все содержимое каталога без указанной директории?
Например, у меня есть следующая структура каталогов:

foo/ bar1/ bar2/ x.txt 

Я хочу удалить папки bar1 и bar2 и файл x.txt , не удаляя foo .

Также рассмотрите имена файлов со специальными символами, которые могут быть проигнорированы или вызвать ошибку.


Редактировать # 1 (30 Сен, 18:26 UTC):
Я думаю, что мой вопрос не является дубликатом этого вопроса , потому что я попросил удалить все в директории, в то время как другого вопроса не было, и ответы не включали такое решение.

One Solution collect form web for “Правильный способ удаления содержимого каталога”

Если вы знаете каталог, который вы можете использовать, используя одну из следующих команд:

 $ find foo/* -delete $ rm -fr foo/* $ find foo/* -exec rm -fr {} + 

Если у вас есть файлы, начинающиеся с точки ( . ), Вам понадобится модифицированная версия rm .

 $ rm -fr foo/{*,.*} 

пример

 $ ls -l foo drwxrwxr-x 6 saml saml 4096 Sep 27 09:43 . drwx------. 263 saml saml 32768 Sep 27 09:42 .. drwxrwxr-x 2 saml saml 4096 Sep 27 09:43 dir1 drwxrwxr-x 2 saml saml 4096 Sep 27 09:43 dir2 drwxrwxr-x 2 saml saml 4096 Sep 27 09:43 dir space1 drwxrwxr-x 2 saml saml 4096 Sep 27 09:43 dir space2 -rw-rw-r-- 1 saml saml 0 Sep 27 09:43 .dot space1 -rw-rw-r-- 1 saml saml 0 Sep 27 09:43 .dot space2 -rw-rw-r-- 1 saml saml 0 Sep 27 09:43 file1 -rw-rw-r-- 1 saml saml 0 Sep 27 09:43 file2 -rw-rw-r-- 1 saml saml 0 Sep 27 09:43 file space1 -rw-rw-r-- 1 saml saml 0 Sep 27 09:43 file space2 $ rm -fr foo/{*,.*} rm: cannot remove directory: `adir/.' rm: cannot remove directory: `adir/..' $ $ ls -l foo/ total 0 $ 

Повторение со свежими каталогами файлов:

 $ find foo/* -delete $ 

Работа со специальными символами

Если у вас есть каталог с именем foo tastic котором есть пробел, вы можете его процитировать, но при этом использовать подстановочный знак:

пример

 $ rm -fr "foo tastic"/* 

Специальные символы

Я часто использую этот трюк, чтобы увидеть, что оболочка думает о моих сортах файлов, прежде чем запускать их. В каталоге примеров, который я использовал выше:

$ ls -1 "file" * file space1 file space2

$ ls -1d "dir" * dir space1 dir space2

Выполняя эти тесты перед началом игры, вы можете понять, какие файлы / каталоги будут играть, когда используется команда, содержащая glob.

  • Команда «sudo rm \\» зависает - хотите, чтобы система не наносила ущерба системе
  • Как я могу безопасно восстанавливать удаленные данные с флэш-накопителя USB?
  • хранить N файлов в подкаталогах
  • Команда, которая может находить файлы, на которые не ссылаются другие файлы, а затем удалять их
  • Удалены файлы Sys (rm -rf / *)
  • Удалить файлы-призраки со специальными символами
  • Почему rm управляет непризнанным флагом w в AIX?
  • Не удалось создать файл rm: превышена дисковая квота
  • Как удалить родительский каталог, не удаляя подпапки?
  • Не удается удалить определенные каталоги в определенном родительском каталоге
  • find и rm -rf, почему он печатает ошибки?
  • Linux и Unix - лучшая ОС в мире.