Как удалить все подкаталоги из каталога?

Этот вопрос относится к фазе II к первому вопросу, который я написал здесь

У меня есть каталог, который содержит кучу подкаталогов, .zip-файлов и других случайных файлов, не содержащихся в подкаталоге.

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

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

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

5 Solutions collect form web for “Как удалить все подкаталоги из каталога?”

В BASH вы можете использовать конечную косую черту (я думаю, она должна работать в любой оболочке POSIX):

rm -R -- */ 

Обратите внимание: -- который отделяет параметры от аргументов и позволяет удалять записи, начинающиеся с дефиса – в противном случае после расширения оболочкой имя записи будет интерпретироваться как опция rm (то же самое выполняется для многих других утилит командной строки).

Добавьте параметр -f если вы не хотите получать запрос на подтверждение при удалении файлов, не подлежащих записи.

Обратите внимание, что по умолчанию скрытые каталоги (те, чье имя начинается с . ) Будут оставлены в покое.

Важное предупреждение: расширение */ также будет включать символические ссылки, которые в конечном итоге будут разрешены к файлам каталога типов. И в зависимости от реализации rm , rm -R -- thelink/ будет либо просто удалять символическую ссылку, либо (в большинстве их) рекурсивно удалять содержимое связанного каталога, но не сам этот каталог, ни символическую ссылку.

Если использовать zsh , лучшим подходом было бы использовать квалификатор glob для выбора файлов только для каталогов типов:

 rm -R -- *(/) # or *(D/) to include hidden ones 

или:

 rm -R -- *(-/) 

для включения символических ссылок в каталоги (но поскольку на этот раз расширение не имеет конца / s, это только символическая ссылка, которая удаляется всеми реализациями rm ).

С bash , AT & T ksh , yash или zsh вы можете делать:

 set -- */ rm -R -- "${@%/}" 

для разметки конечного / .

В дополнение к шаблону, вы также можете использовать find (по крайней мере GNU find) для этого:

 find -mindepth 1 -maxdepth 1 -type d -print0 | xargs -0 rm -R 

Как и в других линиях find , вы можете запустить первую часть ( find -mindepth 1 -maxdepth 1 -type d ), чтобы просмотреть список каталогов, которые будут удалены.

Более безопасный вариант – сделать что-то вроде этого:

 find -mindepth 1 -maxdepth 1 -type d -print0 | xargs -0 mv -i -t ../to-rm # or mv -i -t ../to-rm */ # or mv -i */ ../to-rm 

любой из которых переместит все ../to-rm в ../to-rm вместо его удаления. Вы можете проверить, что он сделал то, что вы хотели, их rm -Rf этот каталог на досуге.

вы можете создать сценарий для некоторых из этих предложений, особенно rm -R -- */ , и сохранить его в папке / usr / local / bin; или создать alias в файле ~ / .bashrc. Так как это очень легко ввести в заблуждение команду и сломать вашу систему – даже одна буква и / или порядок букв могут привести к катастрофическим последствиям – это будет несколько более надежным решением, чем набрать различные параметры и аргументы каждый раз, когда вы хотите выполнить эту задачу.

Кроме того, вы можете включить в свой скрипт / команду параметр -i or --interactive=once или -I or --interactive=always который будет служить еще одним инструментом для предотвращения непреднамеренных удалений.

Кроме того, было предложено что-то вроде «derobert»; просто скопируйте / вставьте сценарий в файл / терминал-редактор и настройте его на свои конкретные нужды, а файлы / каталоги будут перемещены в один каталог (содержимое которого вы можете проверить / проверить), которое вы можете просто удалить выдача команды rm -rf .

Другой вариант – использовать GUI-приложение, такое как ваш файловый менеджер, и просто выбрать все применимые файлы / папки, которые вы хотите удалить. Проверьте свои справочные страницы вашего дистрибутива, если у вас нет разрешений.

Наконец, если папки пусты – по существу простые имена файлов, вы можете использовать команду rmdir для их удаления. Он не работает для всего, что вы, возможно, захотите удалить, но это будет полезно в тех случаях, когда вы захотите сделать «уборку дома». ** вы можете попробовать параметр -p --ignore-fail-on-non-empty , который позволит вам удалить определенные подкаталоги, а также их пустые «родители» – каталоги, в которых они находятся.

Сначала вам нужно перечислить каталоги, а затем удалить их, не мешая нормальным файлам, ls -d * /, только перечисляет подкаталоги, а трубопровод с помощью rm удаляет каталоги и содержимое, сохраняя свободные файлы неповрежденными.

Эта команда должна выполнять эту работу,

 ls -d */ | xargs rm -rf 

rm -rf <directory name> . Оно работает. Просто введите rm <directory name> просто приводит к числу вопросов, в которых каждый из подкаталогов должен быть удален вручную. Но rm -rf помогает сразу удалить весь каталог вместе со своими подкаталогами.

  • Инициализация поиска в vi перед запуском
  • Как выполнять поиск, замену и добавление шаблона в конец каждой строки
  • Почему символ дикой карты * настолько отличается между командами zip и rm?
  • grep -f сбой в файле, отредактированном в Windows
  • Соответствие шаблону ls
  • Почему tar --exclude = ". *" Создает пустой архив?
  • BASH: количество слов в каждой строке документа
  • Проверьте хвост нескольких файлов
  • Помощник Scrabble в bash
  • Как игнорировать несколько файлов с помощью `ag` Silver Searcher
  • Скопировать / Переместить всю папку, но с определенными расширениями
  • Interesting Posts

    Segfault везде даже при переустановке ОС

    /etc/rc.d vs /etc/init.d

    Как изменить права доступа / владельца или удалить папку для скачивания (владелец: root wheel)?

    Пересылка сообщений с определенным фильтром

    Как я могу перезаписать файл назначения netcat, который, в отличие от добавления?

    Как применяются разрешения файлов для вновь созданных файлов?

    Не удалось прочитать файл по какой-либо причине

    Свойства команды cat

    Как перезапустить «остановленное» устройство bcache?

    Игнорирование события первого щелчка на dpms или пробуждении экрана

    Linux не бросает FS Caches. Вместо этого память начинает свопинг

    Как удалить zsh keybinding, если я не знаю, что он делает?

    Установите два одинаковых USB-устройства. Всегда в том же порту UBUNTU

    Как я могу отсортировать список имен файлов с помощью некоторой подстроки имени?

    Установите тайм-аут для ответа веб-страницы с помощью завитка

    Linux и Unix - лучшая ОС в мире.