Как удалить все файлы в каталоге?

Я пытаюсь удалить все файлы и подкаталоги в каталоге. Я использовал rm -r для удаления всех файлов, но хочу удалить все файлы и подкаталоги, за исключением самого верхнего каталога.

Например, у меня есть верхний каталог, такой как images . Он содержит файлы header.png , footer.png и подкаталог.

Теперь я хочу удалить header.png , footer.png и подкаталог, но не images .

Как я могу это сделать в Linux?

14 Solutions collect form web for “Как удалить все файлы в каталоге?”

Если ваш каталог верхнего уровня называется images , тогда запустите rm -r images/* . Это использует оператор оболочки glob * для запуска rm -r для каждого файла или каталога в images .

Чтобы удалить скрытые файлы, вы должны указать:

 rm -r images/* images/.* 

С оболочками, чьи глобусы включают . и .. , это приведет к ошибке, например

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

но он удалит скрытые файлы.

Подход без ошибок состоит в том, чтобы использовать find / delete с помощью mindepth. Это gnu-find.

 find images -mindepth 1 -delete 

В вашем поиске может отсутствовать предикат -mindepth или -delete , и в этом случае вы могли бы сделать:

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

Чтобы удалить все файлы и каталоги (включая скрытые ) в каталоге, вы можете попробовать следующее:

  • используйте ls -Ab для соответствия всем файлам / каталогам

     cd dir_name && rm -rf `ls -Ab` 
  • использовать find для соответствия всем файлам / каталогам

     find dir_name -mindepth 1 -delete 

    или, если ваша find не поддерживает -delete :

     find dir_name -mindepth 1 -exec rm -rf {} 
  • удалить папку, а затем воссоздать ее

     rm -rf dir_name && mkdir dir_name 
  • в bash,

     shopt -s dotglob rm -rf dir_name/* 

Чтобы рекурсивно удалить все обычные файлы в каталоге, эта команда (при условии find GNU или FreeBSD) достаточно хороша:

 find . -type f -delete 

Это оставляет все нерегулярные файлы, такие как символические ссылки (независимо от того, указывают ли они на обычные файлы или нет), каталоги, фиксы, сокеты, устройства …

Смотрите также:

 find . ! -type d -delete 

для удаления файлов любого типа, кроме каталога .

Попробуйте эту версию:

  rm -r test/* 

Я использую команду find здесь:

Шаг 1. Найдите все файлы и удалите их:

 find /path/to/directory/ -type f -exec rm {} \; 

Пример:

 find /home/user/Desktop/images/ -type f -exec rm {} \; 

Шаг 2. Найдите все подкаталоги и удалите их:

 find /path/to/directory/ -type d -exec rm -R {} \; 

Вопрос состоял в том, чтобы удалить каталог = удалить содержимое каталога, включая скрытые файлы, но не сам каталог. Команда find с -mindepth 1 на самом деле является правильным способом, но чтобы избежать сообщений об ошибках, она должна быть соединена с -maxdepth 1:

 find /path/to/dir -mindepth 1 -maxdepth 1 -exec rm -rf '{}' \; 

Синтаксис rm:

 rm [OPTION]... FILE... 

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

 rm -r sub_dir/ 

Вы можете удалить каталог, используя следующую команду:

 sudo rm -r directoryname1/2/3/* 

Он будет удалять всю директорию после 3 / *.

Пример sudo rm -r Downloads / song / *

Будет удалено все файлы, находящиеся в папке Downloads/song .

Это отлично работает для меня, проверял несколько вариантов работы каждый раз.

Из каталога, содержащего каталог изображений.

 rm -frd ./images/* 

до:

 images/ |_ header.png |_ footer.png |_ subdir/ 

после:

 images/ 

Чтобы удалить все файлы и подкаталоги в текущем каталоге, включая скрытые, без сообщения об ошибке :

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

Или из родительского каталога:

 rm -rf images/.[^.] images/.??* images/* 

От https://serverfault.com/a/47940/269538 .

Другой вариант:

 $ rm -rf /path/to/directory/{*,.*} 

источник: https://askubuntu.com/a/552834/56648

Удалите папку «test» и все файлы внутри:

  rm -r test 

Удалите все файлы внутри, но сохраните папку «test»:

  rm -r test/* 

cd в папку, выполните следующую команду:

 ls |xargs rm -rf 
  • Как удалить файл без имени
  • Как прикоснуться, rm и коснуться в Unix?
  • Невозможно запросить пользователя с помощью опции rm bultin prompt -i с помощью xargs и найти
  • Рекурсивный rm для меня не работает
  • Удалите несколько последовательных имен файлов, но игнорируйте часть первого
  • Считайте удаленные файлы с помощью интерактивного rm (rm -i)
  • У меня есть файл, который я не могу удалить после того, как файл mv был прерван
  • Может ли rm рекурсивно удалять пустые каталоги?
  • Не удается удалить <файл>: нет такого файла или каталога
  • Каталог «~» попал в одну из моих папок
  • Поиск и удаление файлов с определенной датой
  • Linux и Unix - лучшая ОС в мире.