- Рекурсивное удаление каталога
- Re: Рекурсивное удаление каталога
- Re: Рекурсивное удаление каталога
- Re: Рекурсивное удаление каталога
- Re: Рекурсивное удаление каталога
- Re: Рекурсивное удаление каталога
- Re: Рекурсивное удаление каталога
- Re: Рекурсивное удаление каталога
- Re: Рекурсивное удаление каталога
- Re: Рекурсивное удаление каталога
- Re: Рекурсивное удаление каталога
- Re: Рекурсивное удаление каталога
- Re: Рекурсивное удаление каталога
- Re: Рекурсивное удаление каталога
- Re: Рекурсивное удаление каталога
- Re: Рекурсивное удаление каталога
- Re: Рекурсивное удаление каталога
- Re: Рекурсивное удаление каталога
- Re: Рекурсивное удаление каталога
- Re: Рекурсивное удаление каталога
- Re: Рекурсивное удаление каталога
- Re: Рекурсивное удаление каталога
- Как искать и удалять каталоги рекурсивно на Linux
- Как удалить каталог в Linux
- Подготовка
- Удаление каталогов с помощью rmdir
- Удаление каталогов с помощью rm
- Удаление каталогов с помощью find
- Удаление всех пустых каталогов
- / bin / rm: слишком длинный список аргументов
- Выводы
- Как удалить каталог в Linux через терминал
- Удаление
Рекурсивное удаление каталога
Язык : си
Имеется вложенный каталог
Надо удалить его с помощью rmdir
Т.е. нужен специальный алгоритм , который построит дерево и пробежит его снизу вверх
Есть такое в природе или нужно изобретать велосипед ?
Зы : rm -r не подходит .
Re: Рекурсивное удаление каталога
эээ. пардон, алгоритм чего именно? построения дерева 😕
Re: Рекурсивное удаление каталога
ну да
надо же сначала очистить каталог и прибить файлы
Re: Рекурсивное удаление каталога
Re: Рекурсивное удаление каталога
Re: Рекурсивное удаление каталога
Re: Рекурсивное удаление каталога
Категорически рекомендуется сделать две вещи:
1. добавить в условие ‘имя ne «.» && имя ne «..»‘
2. вместо реальных вызовов unlink/rmdir поставить printf(«unlink(%s)»)
Re: Рекурсивное удаление каталога
> Категорически рекомендуется сделать две вещи:
> 1. добавить в условие ‘имя ne «.» && имя ne «..»‘
> 2. вместо реальных вызовов unlink/rmdir поставить printf(«unlink(%s)»)
да, спасибо, забыл
Re: Рекурсивное удаление каталога
3. еще аккуратненько нужно с символическими ссылками
Re: Рекурсивное удаление каталога
Вобще еще есть такая штука как «info libc», там описывается функция ftw(), с опциями FTW_DEPTH и FTW_PHYS эта функиця даст нужный результат. Хотя иногда лучше не использовать готовые библиотечные решения.
Re: Рекурсивное удаление каталога
> Ща тебе ещё вилфред на перле сообразит наверное
Re: Рекурсивное удаление каталога
убить_каталог(каталог)
<
открыть каталог
по всем файлам(имена)
<
если каталог(имя)
убить_каталог(имя)
иначе
unlink(имя)
>
закрыть каталог
rmdir(каталог)
>
И при развесистой иерархии файловой системы, ты нагребешь кучу открытых дескрипторов каталогов.
Вобщем, хреновая практика написания подобных вещей. не энтерпрайз.
Re: Рекурсивное удаление каталога
> И при развесистой иерархии файловой системы, ты нагребешь кучу открытых дескрипторов каталогов.
да я уже вчера в этом убедился
немного не то
я пишу консольный файловый менеджер
полез в исходники мц , а там удаление вложенных каталогов делается таким хитрным способом , что легче свой вариант написать
Re: Рекурсивное удаление каталога
> И при развесистой иерархии файловой системы, ты нагребешь кучу открытых дескрипторов каталогов. Вобщем, хреновая практика написания подобных вещей. не энтерпрайз.
что мешает считать сожержимое директории, закрыть её и потом обработать? IMHO каталоги с десятками или сотнями тысяч записей — это скорее редкость, чем правило.
Re: Рекурсивное удаление каталога
> И при развесистой иерархии файловой системы, ты нагребешь кучу открытых дескрипторов каталогов.
на каждом уровне вложенности только один дескриптор открывается, т.е. если у тебя 1000 вложенных друг в друга каталогов, то это плохо
Re: Рекурсивное удаление каталога
Re: Рекурсивное удаление каталога
Ну если уж пишется действительно что то нужное, то может проще взять исходники команды rm и скопировать соответствующие подпрограммы. Инчае зачем нужен GPL, если не копировать куски исходного текста :).
Потому что если поковыряться в исходых текстах rm, то, например, там есть такое, что lstat() вызывается дважды, до смены каталога и после (на текущий каталог), и сравниваются полученные номера инодов.
Re: Рекурсивное удаление каталога
> зачем нужен GPL, если не копировать куски исходного текста
зачем нужен unix если копировать куски исходного текста вместо system(«rm -rf . «)
Re: Рекурсивное удаление каталога
> зачем нужен unix если копировать куски исходного текста вместо system(«rm -rf . «)
Хватит учить детей анонизму
Re: Рекурсивное удаление каталога
>пишу консольный файловый менеджер >rm -r не подходит
Не юниксвэй. А вы слуайно не быдлокодер, я извиняюсь?
Re: Рекурсивное удаление каталога
> Не юниксвэй. А вы слуайно не быдлокодер, я извиняюсь?
как раз system(«rm -rf») — путь истинного быдла
Re: Рекурсивное удаление каталога
> Ну если уж пишется действительно что то нужное, то может проще взять исходники команды rm и
я так и сделал — выдрал исходники rm из пакета fileutils
работает фантастически быстро , размер вложенного каталога пофиг
Источник
Как искать и удалять каталоги рекурсивно на Linux
В одной из наших предыдущих статей мы объяснили, как найти каталоги и файлы, потребляющие наибольшее дисковое пространство в файловой системе в Linux.
Если вы заметили, что такие каталоги больше не содержат важных файлов и подкаталогов (например, старые резервные копии, загрузки и т. д.),
Вы можете удалить их, чтобы освободить место на диске.
В этом кратком руководстве описывается, как найти и удалить каталоги рекурсивно в файловой системе Linux.
Для достижения вышеуказанной цели вы можете использовать команду find вместе с командой rm, используя синтаксис ниже.
Здесь знак + в конце позволяет одновременно считывать несколько каталогов.
Внимание: вы должны использовать команду rm внимательно, потому что это одна из самых опасных команд для использования в Linux: вы можете случайно удалить критические системные каталоги, что приведет к сбою системы.
В приведенном ниже примере мы будем искать каталог с именем files_2008 и удалять его рекурсивно:
Вы также можете использовать find и xargs; в следующем синтаксисе, действие -print0 позволяет печатать полный путь каталога на стандартном выходе, за которым следует нулевой символ:
Используя тот же пример выше, мы имеем:
И последнее, но не менее важное: если вас беспокоит безопасность ваших данных, вы можете изучить 3 способа постоянного и безопасного удаления «файлов и каталогов» в Linux.
Источник
Как удалить каталог в Linux
Есть несколько различных способов удаления каталогов в системах Linux. Если вы используете файловый менеджер рабочего стола, такой как Gnome’s Files или KDE’s Dolphin, вы можете удалять файлы и каталоги с помощью графического пользовательского интерфейса менеджера. Но если вы работаете на автономном сервере или хотите удалить сразу несколько каталогов, лучшим вариантом является удаление каталогов (папок) из командной строки.
В этой статье мы объясним, как удалять каталоги в Linux с помощью команд rmdir , rm и find .
Подготовка
При удалении каталога с помощью файлового менеджера рабочего стола каталог фактически перемещается в корзину и может быть легко восстановлен.
Будьте особенно осторожны при удалении файлов или каталогов из командной строки, поскольку после удаления каталога с помощью команд, описанных в этой статье, его невозможно полностью восстановить.
В большинстве файловых систем Linux для удаления каталога требуется разрешение на запись в каталог и его содержимое. В противном случае вы получите ошибку «Операция запрещена».
Имена каталогов с пробелами должны быть экранированы обратной косой чертой ( / ).
Удаление каталогов с помощью rmdir
rmdir — это утилита командной строки для удаления пустых каталогов. Это полезно, когда вы хотите удалить каталог только в том случае, если он пуст, без необходимости проверять, пуст каталог или нет.
Чтобы удалить каталог с помощью rmdir , введите команду, а затем имя каталога, который вы хотите удалить. Например, чтобы удалить каталог с именем dir1 , введите:
Если каталог не пустой, вы получите следующую ошибку:
В этом случае вам нужно будет использовать команду rm или вручную удалить содержимое каталога, прежде чем вы сможете его удалить.
Удаление каталогов с помощью rm
rm — это утилита командной строки для удаления файлов и каталогов. В отличие от rmdir команда rm может удалять как пустые, так и непустые каталоги.
По умолчанию при использовании без каких-либо параметров rm не удаляет каталоги. Чтобы удалить пустой каталог, используйте параметр -d ( —dir ), а для удаления непустого каталога и всего его содержимого используйте параметр -r ( —recursive или -R ).
Например, чтобы удалить каталог с именем dir1 вместе со всем его содержимым, введите:
Если каталог или файл в каталоге защищен от записи, вам будет предложено подтвердить удаление. Чтобы удалить каталог без запроса, используйте параметр -f :
Чтобы удалить сразу несколько каталогов, вызовите команду rm , после которой укажите имена каталогов, разделенные пробелом. Приведенная ниже команда удалит все перечисленные каталоги и их содержимое:
Параметр -i указывает rm запрашивать подтверждение удаления каждого подкаталога и файла. Если в каталоге много файлов, это может немного раздражать, поэтому вы можете рассмотреть возможность использования опции -I которая предложит вам только один раз, прежде чем продолжить удаление.
Чтобы удалить каталог, введите y и нажмите Enter .
Вы также можете использовать обычные расширения для сопоставления и удаления нескольких каталогов. Например, чтобы удалить все каталоги первого уровня в текущем каталоге, который заканчивается на _bak , вы должны использовать следующую команду:
Использование регулярных расширений при удалении каталогов может быть рискованным. Рекомендуется сначала перечислить каталоги с помощью команды ls чтобы вы могли видеть, какие каталоги будут удалены, прежде чем запускать команду rm .
Удаление каталогов с помощью find
find — это утилита командной строки, которая позволяет вам искать файлы и каталоги на основе заданного выражения и выполнять действие с каждым совпадающим файлом или каталогом.
Наиболее распространенный сценарий — использовать команду find для удаления каталогов на основе шаблона. Например, чтобы удалить все каталоги, которые заканчиваются на _cache в текущем рабочем каталоге, вы должны запустить:
Давайте проанализируем команду выше:
- /dir — рекурсивный поиск в текущем рабочем каталоге ( . ).
- -type d — ограничивает поиск каталогами.
- -name ‘*_cache’ — искать только каталоги, заканчивающиеся на _cache
- -exec — выполняет внешнюю команду с необязательными аргументами, в данном случае это rm -r .
- <> + — добавляет найденные файлы в конец команды rm .
Удаление всех пустых каталогов
Чтобы удалить все пустые каталоги в дереве каталогов, выполните:
Вот объяснение используемых опций:
- /dir — рекурсивный поиск в каталоге /dir .
- -type d — ограничивает поиск каталогами.
- -empty — ограничивает поиск только пустыми каталогами.
- -delete — удаляет все найденные пустые каталоги в поддереве. -delete может удалять только пустые каталоги.
Используйте параметр -delete с особой осторожностью. Командная строка поиска оценивается как выражение, и если вы сначала добавите параметр -delete , команда удалит все, что находится ниже указанных вами начальных точек.
Всегда сначала проверяйте команду без опции -delete и используйте -delete в качестве последней опции.
/ bin / rm: слишком длинный список аргументов
Это сообщение об ошибке появляется, когда вы используете команду rm для удаления каталога, содержащего огромное количество файлов. Это происходит из-за того, что количество файлов превышает системное ограничение на размер аргумента командной строки.
Есть несколько разных решений этой проблемы. Например, вы можете cd в каталог и вручную или с помощью цикла для удаления Подкаталогов один за другим.
Самое простое решение — сначала удалить все файлы в каталоге с помощью команды find а затем удалить каталог:
Выводы
С помощью rm и find вы можете быстро и эффективно удалять каталоги по различным критериям.
Удаление каталогов — простой и легкий процесс, но вы должны быть осторожны, чтобы не удалить важные данные.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Источник
Как удалить каталог в Linux через терминал
Управление многопользовательской системой Линукс зачастую осуществляется при помощи терминала. Отдельно взятые действия (например, удаление папки) можно выполнить и другими способами, но через окно терминала это делается гораздо быстрее и удобнее, поскольку только так пользователь получает тотальный контроль над ситуацией. При желании, он волен удалить все пустые каталоги в системе, либо очистить её от папок с повторяющимися наименованиями.
Чтобы удалить папку в Linux, необходимо воспользоваться специальной командой. Стоит отметить тот факт, что в Линукс существует несколько альтернативных комбинаций для проведения подобной операции. Именно их мы и рассмотрим в данной статье.
Удаление
Первое, что приходит на ум в таком деле – это удаление каталога посредством утилиты rmdir. Данная программа прекрасно справляется со своей задачей, при условии, что пользователю необходимо очистит Линукс от пустых папок.
Однако, команда «rmdir» имеет существенный недостаток, она удаляет только пустые каталоги.Чтобы удалить все файлы и подкаталоги, необходимо использовать команду rm с опцией «-R».
Изначально команда rm разработана для удаления файлов в ОС Линукс, однако, с применением правильных опций, эта команда способна выполнить и другие поставленные задачи. Убедитесь в этом сами:
ВАЖНО! Опция -R отвечает за рекурсивное удаление папок, в которых содержатся файлы.
Чтобы вывести данные об объектах, которые будут уничтожены, необходимо ввести следующую комбинацию в строке терминала:
С опцией -R мы уже разобрались ранее. При добавлении -f пользователь застрахует систему от удаления файлов без запроса. При добавлении -v пользователь получает информацию об удаляемых файлах – их наименования.
Приведенные примеры особенно актуальны при случае, если пользователь Линукс удаляет файлы из домашнего каталога. Если нужно очистить другую папку, необходимо указать в окне терминала её полный путь или при помощи «cd,» зайти в нужную директорию. На практике это должно выглядеть следующим образом:
# rm -Rfv /var/log/test
Более подробно о «rm» написано в другой статье здесь
А теперь поговорим об удалении каталога, в наименовании которого есть конкретные слова. Как это сделать на практике:
$ find . -type d -name «papka» -exec rm -rf <> \;
В данной комбинации «-type d» означает, что пользователь хочет найти только каталоги, а «-name» — это параметр, который задает нужное наименование для поиска в системе.
Еще раз вернемся к домашнему каталогу. Как убрать из него пустые папки:
/ -empty -type d -delete
Чтобы понимать, сколько пустых папок будет удалено из системы, можно посчитать их количество посредством специальной комбинации. Она представлена ниже:
/ -empty -type d | wc -l
При необходимости удалить каталог из консоли Linux без шанса на дальнейшее восстановление файлов, рекомендуется использовать для этих целей программу wipe. Данная утилита не входит в пакет стандартных установок, но её легко заиметь на своем ПК:
# apt install wipe
Чтобы удалить нужную папку посредством утилиты, нужно ввести в терминале:
В данном случае функция -f обеспечит автоматическое удаление всех под папок без запроса юзера системы.
В данной статье представлено несколько простых и быстрых способов удаления каталога из операционной системы Linux. Всего несколько кликов – и вопрос закрыт! Выберите для себя оптимальный метод удаления папки, и принимайтесь за дело.
Источник