Bash удалить пустые файлы
По умолчанию команда rm не удаляет директории. Чтобы удалить директорию и все ее содержимое, включая вложенные директории, нужно использовать опцию -r (рекурсивное удаление).
Синтаксис
файл(ы) — один или несколько файлов и/или директорий, записанных через пробел. Можно использовать шаблон (например, *.txt ).
Опции
Игнорировать несуществующие файлы и аргументы. Никогда не выдавать запросы на подтверждение удаления.
Выдать один запрос на подтверждение удаления всех файлов, если удаляется больше трех файлов или используется рекурсивное удаление. Опция применяется, как более «щадящая» версия опции -i
- never — никогда не выдавать запросы на подтверждение удаления.
- once — выводить запрос один раз (аналог опции -I ).
- always — выводить запрос всегда (аналог опции -i ).
Если значение КОГДА не задано, то используется always
Если в качестве директории для удаления задан корневой раздел / , то считать, что это обычная директория и начать выполнять удаление.
Если в качестве директории для удаления задан корневой раздел / , то запретить выполнять команду rm над корневым разделом. Данное поведение используется по умолчанию.
Примечание
Если нужно удалить файл, название которого начинается с символа - , например, файл -myfile , то используется следующая команда:
Примеры использования команды rm
Удалить файл
Чтобы удалить файл с помощью команды rm достаточно указать название файла:
Можно удалить несколько файлов, перечислив их имена через пробел:
Принудительно удалить защищенный файл
Если файл защищен от записи, то по умолчанию будет выдан запрос на подтверждение операции удаления. Чтобы запрос не выводился, и происходило удаление защищенных файлов, используется опция -f
Удалить все файлы в текущей директории
Чтобы удалить все файлы в текущей директории можно использовать шаблонную запись звездочка *
Выдавать запрос перед удалением каждого файла
Чтобы перед удалением каждого файла выводилось подтверждение на удаление данного файла, используется опция -i
Выдать запрос на удаление один раз
При использовании опции -I выводится всего один запрос на подтверждение удаления файлов, причем, только если удаляемых файлов четыре и более. Если файлов 3, или 2, или 1, то запрос не выводится.
Удалить директорию и ее содержимое
Для удаления директорий и их содержимого используется опция -r . Удалим директорию mydir и все файлы и директории внутри нее:
Иногда, у нас имеются файлы и в них много пустых строк — это не очень удобно (по крайней мере для чтения). Файлы можно отредактировать вручную, если файл имеет несколько пустых строк, но если файл имеет тысячи пустых строк, это трудно сделать вручную. Используйте один из следующих методов для удаления пустых строк из файла.
-=== СПОСОБ 1 — Использование утилиты SED ===-
Sed потоковый редактор. С помощью этой утилиты, можно легко удалить все пустые строки. Используйте одну из следующих команд sed для удаления пустых строк из файла.
- main.txt — Это исходный файл, из которого нужно удалить пустые строки.
- output_file.txt — Будет служить файлом без пустых строк.
-=== СПОСОБ 2 — Использование perl ===-
И так, чтобы удалить пустые строки в файлу (у меня это main.txt), используйте:
-=== СПОСОБ 3 — Использование утилиты AWK ===-
Используйте команду awk для удаления пустых строк из файла.
- main.txt — Это исходный файл, из которого нужно удалить пустые строки.
- output_file.txt — Будет служить файлом без пустых строк.
И так, запускаем:
-=== СПОСОБ 4 — Использование утилиты CAT ===-
Используйте команду cat для удаления пустых строк из файла.
- main.txt — Это исходный файл, из которого нужно удалить пустые строки.
- output_file.txt — Будет служить файлом без пустых строк.
И так, запускаем:
-=== СПОСОБ 5 — Использование утилиты TR ===-
Используйте команду cat для удаления пустых строк из файла.
- main.txt — Это исходный файл, из которого нужно удалить пустые строки.
- output_file.txt — Будет служить файлом без пустых строк.
Если появятся еще идеи. Я дополню данную тему!
Вот и все, статья «Удалить пустые строки с файла в Unix/Linux» завершена.
Добавить комментарий Отменить ответ
Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.
далее, «скармливаю» этот список некоторому алгоритму, и результат передаю в rm.
проблема в том, что файлы 'find' отыскивает используя ключ '-type f', и как следствие, после удаления файлов иногда остаются пустые директории. использовать 'find -type d' не могу ввиду того, что не всегда нужно удалять все файлы из директории(т.е. всю директорию).
подскажите как разрулить?
Извини, не совсем понял: что нужно удалять, а что не нужно удалять? Файлы, которые старше заданного и пустые каталоги? Или что? В общем, условия задачи неполны и формулировка неясная.
rmdir удаляет пустые (и только пустые) папки. Пользуйся.
rmdir -p bla 2>/dev/null
да. нужно удалять файлы, и если после удаления файлов директория пуста - удалить и ее.
Мне приходит в голову только двухпроходный алгоритм
хм.. кстати вариант. ниже еще порекомендовали ключик -p
Тогда в чём проблема? Выше тебе DoctorSinus и YAR уже сказали про rmdir, который удаляет только пустые каталоги. Или тебе ещё нужна проверка: пуст каталог или нет?
тебе DoctorSinus и YAR уже сказали про rmdir
да. но что-то я не подумал о столь простом решении. начал алгоритм прорабатывать, и сам себя запутал.
Или тебе ещё нужна проверка: пуст каталог или нет?
нет. если rmdir удаляет только пустые, то ничего лишнего он не удалит.
вот dumal тоже, оказывается, как и я, начал думать над алгоритмом :)
да. но что-то я не подумал о столь простом решении. начал алгоритм прорабатывать, и сам себя запутал.
Бывает. Иной раз засочиняешься до «чертиков в глазах» :), а задача решается одной командой. По себе знаю.
'rmdir -p' не удаляет директорию если в ней имеется другая директория, даже и пустая.
поступил так: повторно выполняю 'find' но уже для поиска директорий, и результат передаю в 'rmdir'
'rmdir -p' не удаляет директорию если в ней имеется другая директория, даже и пустая.
Да, если есть каталог с подкаталогами a/b/c, то
не будет удалять - выдаст ошибку.
Собственно, в man-е всё это расписано.
поступил так: повторно выполняю 'find' но уже для поиска директорий, и результат передаю в 'rmdir'
используйте find -delete или find -depth. Это приведёт к тому, что будут удалятся каталоги/файлы начиная с внутренних. Что-то типа (не тестировал!)
find -type f -empty -delete -o -type d -exec rmdir <> \;
Идея в том, что вы обходите дерево ФС начиная с листьев, и там удаляете только листья - пустые файлы (ну или там по -newer), и пустые каталоги. Ваша проблема в том, что при прямом обходе дерева и удалении нелистового узла дерево теряет связаность, и рассыпается, вот вам и не дают порушить структуру. Просто используйте обратный обход.
кстати, find -empty работает и с каталогами, это действительно «пусто», а вовсе не нулевая длинна.
Неважно кто вы, разработчик ПО, специалист по данным, менеджер ИТ-инфраструктуры или просто любитель компьютеров — вам нужно знать, как пользоваться терминалом в Linux и macOS. Но сложность в том, что необходимо запомнить слишком много команд. И если у вас нет чудо-памяти, время от времени приходится искать в Интернете ту или иную команду.
Сегодня я поделюсь с вами самыми популярным и полезными командными интерпретаторами.
Помощь
Забыли аргументы для cp ? Какая опция у команды mkdir ? Вот вам подсказка:
Конвейер
Зачастую с его помощью перенаправляют вывод одной команды на ввод другой или приписывают команду к файлу:
Фильтрация вывода
Бывает, что команда выводится слишком долго. В этом случае вы либо разделите страницу с помощью команды more или less , либо выведите строки, которые содержат специальное слово или предложение с grep :
Очистка экрана
Слишком много текста в терминале? Просто напишите clear и продолжайте работать.
Информация о системе
С этими командами вы с легкостью получите все подробности о компьютере:
Работам с процессами
Следующие команды предоставляют общие сведения о всех процессах, происходящих в системе. В macOS и некоторых дистрибутивах Linux htop не установлен, поэтому перед использованием нужно установить его с помощью стандартного менеджера пакетов (для macOS — Homebrew):
Смена пользователей
При открытии терминального окна все вводимые команды выполняются под текущим пользователем. Однако зачастую приходится выполнять команды от привилегированного пользователя, поэтому важно знать, как их сменять внутри оболочки.
Копирование и вставка в буфер обмена
Вы можете скопировать и вставить текст из/в терминал, выделив их и нажав Ctrl + C или Ctrl + V. Но иногда хочется напрямую получить доступ к буферу обмена. И как вы видите ниже, это не так уж и просто, что на Linux, что на macOS.
Можно двумя способами определить переменные внутри оболочки: в реальном времени, написав в терминале соответствующую команду, или же определить их в файле .bashrc в домашний каталог, где они будут храниться вечно.
Ещё один интересный инструмент — alias (псевдоним), сокращение для длинных команд. Посмотрим, как он строится:
Для тех, кто не знает, путь (Path) – это каталоги, в которых ОС ищет файлы для исполнения. С его помощью можно запустить файл, написав лишь название, даже не нужно знать его расположение. Кроме того, в путь можно добавить папку, а также найти каталог, где находится исполняемый файл, с помощью команд:
Смена текущего каталога
Для перехода между каталогами файловой системы вам лишь нужно знать, как применять команду cd .
Содержимое каталога
Чтобы вывести в каталоге файлы, папки, а также их свойства, не обойтись без команды ls .
Самый простой способ скачать файл с веб-серверов — это команда wget .
Создать каталог
Если вы хотите создать папку, используйте команду mkdir .
Копирование, перемещение и удаление
Как правило, функции копирования, перемещения и удаления выполняют через файловый менеджер, но можно делать это и через терминал.
Права доступа и владельцы
Права доступа и владельца файла или каталога можно изменить с помощью команды chmod и chown .
Поиск файлов
Забыли где файл contacts.json ? Хотите вывести все PDF файлы, находящиеся в папке? С помощью команды find вы можете сделать это и многое другое.
Вычисление контрольной суммы SHA256 файла
При скачивании любой программы из Интернета, рекомендуется проверить контрольную сумму SHA, чтобы убедиться, всё ли верно скачалось. И сделать это гораздо легче через терминал:
Сжатие и распаковка TAR/ZIP файлов
Неважно, что у вас TAR или ZIP файл, вы можете распаковать его через терминал или же создать из существующих папок:
Свободное место на диске
Хотите узнать доступное место на жестком диске? Или на внешнем? Или в текущем каталоге? В этих вопросах помогает команда df .
Через терминал можно не только просматривать содержимое текстового файла, но и проводить анализы, например сортировать и менять порядок строк по содержанию, подсчитывать количество строк, слов, символов, и выделить столбцы, если это табличный файл. Рассмотрим их в действии:
Существует несколько различных способов удаления каталогов в системах Linux. Если вы используете файловый менеджер Desktop, такой как «Файлы Gnome» или «Dolphin» в KDE, вы можете удалять файлы и каталоги с помощью графического пользовательского интерфейса менеджера. Но если вы работаете на автономном сервере или хотите удалить несколько каталогов одновременно, лучшим вариантом будет удаление каталогов (папок) из командной строки.
Прежде чем вы начнете
При удалении каталога с помощью файлового менеджера на рабочем столе этот каталог фактически перемещается в корзину и может быть легко восстановлен.
Будьте особенно осторожны при удалении файлов или каталогов из командной строки, поскольку после удаления каталога с помощью команд, описанных в этой статье, его невозможно полностью восстановить.
В большинстве файловых систем Linux удаление каталога требует разрешения на запись в каталог и его содержимое. В противном случае вы получите ошибку «Операция не разрешена».
Имена каталогов с пробелом в них должны быть экранированы обратной косой чертой ( / ).
Удаление каталогов с rmdir
rmdir утилита командной строки для удаления пустых каталогов Это полезно, когда вы хотите удалить каталог, только если он пустой, без необходимости проверять, является ли каталог пустым или нет.
Чтобы удалить каталог с помощью rmdir , введите команду, а затем имя каталога, который вы хотите удалить. Например, чтобы удалить каталог с именем dir1 , введите:
Если каталог не пустой, вы получите следующую ошибку:
В этом случае вам нужно будет использовать rm команду или вручную удалить содержимое каталога, прежде чем вы сможете удалить его.
Удаление каталогов с rm
rm утилита командной строки для удаления файлов и каталогов В отличие rmdir от rm команды можно удалять как пустые, так и непустые каталоги.
По умолчанию при использовании без какой-либо опции rm не удаляются каталоги. Чтобы удалить пустой каталог, используйте опцию -d ( --dir ) и удалите непустой каталог, а все его содержимое используйте опцию -r ( --recursive или -R ).
Например, чтобы удалить каталог dir1 со всем его содержимым, вы должны набрать:
Если каталог или файл в каталоге защищен от записи, вам будет предложено подтвердить удаление. Чтобы удалить каталог без запроса, используйте -f параметр:
Чтобы удалить несколько каталогов одновременно, вызовите rm команду, а затем имена каталогов, разделенные пробелом. Команда ниже удалит все перечисленные каталоги и их содержимое:
-i Параметр указывает rm на запрос на подтверждение удаления каждого подкаталога и файла. Если каталог содержит много файлов, это может немного раздражать, поэтому вы можете рассмотреть возможность использования -I опции, которая предложит вам только один раз, прежде чем продолжить удаление.
Вы также можете использовать обычные расширения для сопоставления и удаления нескольких каталогов. Например, чтобы удалить все каталоги первого уровня в текущем каталоге, который заканчивается на _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 опцию с особой осторожностью. Командная строка find оценивается как выражение, и если вы -delete сначала добавите параметр, команда удалит все, что находится ниже указанных вами начальных точек.
Всегда проверяйте команду сначала без -delete опции и используйте -delete в качестве последней опции.
/ bin / rm: список аргументов слишком длинный
Есть несколько разных решений этой проблемы. Например, вы можете cd в каталог и вручную или с помощью цикла удалить подкаталоги один за другим.
Самое простое решение - сначала удалить все файлы в каталоге с помощью find команды, а затем удалить каталог:
Вывод
С помощью rm и find вы можете удалять каталоги на основе различных критериев быстро и эффективно.
Удаление каталогов - это простой и легкий процесс, но вы должны быть осторожны, чтобы не удалить важные данные.
Читайте также: