Linux удаление файлов шаблону

Linux, найти все файлы, соответствующие шаблону и удалить

Нужно найти все файлы (рекурсивно), которые имеют подчеркивание в имени файла, а затем удалить их через командную строку.

4 ответа 4

Это самый безопасный и быстрый вариант:

Он не требует конвейерной обработки и не разрывается, если файлы содержат пробелы или символы-заглушки или что-то еще, что могут помешать другие конструкции. Самое простое правило, которое нужно помнить, это никогда не анализировать результаты find . И никогда не grep имена файлов, если вы хотите что-то с ними сделать позже. Вы можете сделать практически все что угодно с помощью функции find .

Это включает в себя каталоги, которые считаются файлами. Некоторые другие примеры, использующие xargs , потерпят неудачу, если имя файла содержит пробелы.

Если вы хотите только обычные файлы:

Хорошо, давайте делать это постепенно.

В качестве первого прохода это просто простое упражнение: передать подстановочный знак в команду find , не забывая процитировать его в кавычках и выполнить команду rm для каждого найденного файла:

Но, конечно, это ужасно неэффективно. Он запускает целый процесс rm для каждого отдельного файла. Поэтому, хотя мы могли бы сделать короткий обход \+ , это не то место, где мы собираемся в конечном итоге, поэтому давайте выберем более короткий путь и xargs чтобы объединить имена файлов в группы:

Но у этого есть две дыры в безопасности. Во-первых, если любое найденное имя файла начинается со знака минус, rm будет рассматривать его как параметр командной строки, а не как имя файла, и выдаст ошибку. (Версия -exec rm <> также имеет эту проблему.) Во-вторых, имена файлов, содержащие пробелы, не будут правильно обрабатываться xargs . Таким образом, дальнейшая итерация должна сделать это немного более пуленепробиваемым:

И, конечно же, есть интерактивные функции rm которые вам, вероятно, не нужны:

-print0 и -0 не являются стандартными, но GNU find и xargs , а также FreeBSD find и xargs понимают их. Однако даже это немыслимо. Нам не нужно создавать никаких дополнительных процессов вообще. GNU и FreeBSD find s оба могут вызвать unlink(2) системный вызов напрямую:

В качестве последней меры предосторожности, которая помешает вам делать больше, чем вы предполагали в определенных обстоятельствах, помните, что файловая система может содержать не только обычные файлы:

Источник

Удаление Папки и Файлов в Linux

Работать с командной строкой должен уметь каждый будущий системный администратор и опытный пользователь Linux. Сегодня мы рассмотрим ещё одну базовую функцию — удаление папки и файлов в Linux с помощью командной строки.

Прокачайте ваш Linux сервер, воспользовавшись скидками на VPS-хостинг в Hostinger! Большой выбор планов, как для учебных, так и для крупных коммерческих проектов.

Команда rmdir

Команда, используемая, чтобы удалить пустую папку в Linux через командную строку — это rmdir.

Основной синтаксис этой команды довольно простой. Вот пример:

  • rmdir — это команда
  • [опция] — опциональный модификатор, который изменяет поведение команды
  • НазваниеПапки — каталог, который вы хотите удалить
Читайте также:  Windows media movie editor

Если опция не указана, rmdir просто удаляет каталог, имя которого указано в качестве места назначения. Перед использованием этой команды вам нужно будет войти на сервер VPS через SSH. Вот статья, которая поможет вам это сделать.

Удаление Папки в Linux с Помощью Команды rmdir

Перед использованием команды rmdir мы рекомендуем вам проверить список файлов в каталоге с помощью команды ls. В нашем случае у нас есть каталог с названием Dir1.

Эта команда удалит пустой каталог с именем Dir1. Довольно просто, правда?

Вы также можете удалить несколько каталогов, разделив их имена пробелами. Например:

После выполнения этой команды каталоги с именами Dir1, Dir2 и Dir3 будут удалены.

Допустим, у нас есть папка Dir3. Dir3 содержит подкаталоги и файлы. Теперь, если мы используем команду:

То получим ошибку:

Как вы уже могли догадаться, rmdir работает только с пустыми каталогами.

Rmdir — умная утилита, которая позволяет удалять только пустые папки. Таким образом, она защищает данные от случайной потери. Помните, что удалённые данные в любом дистрибутиве Linux практически невозможно восстановить.

Опция -p позволяет удалить папку через командную строку, а также её родительские каталоги.

Эта команда удалит Dir3 и его родительские каталоги Dir2 и Dir1.

Опция -v выводит диагностический текст для каждого обработанного каталога. Использование этой опции выведет подтверждение со списком всех каталогов, которые были удалены.

Команда rm

Команда rmdir отлично подходит для безопасного удаления неиспользуемых и пустых каталогов. Если вы хотите удалить файл или каталог, содержащий файлы, вам придётся использовать команду rm.

Синтаксис этой команды похож на rmdir:

Как Удалить Файл в Linux с Помощью Команды rm

Давайте используем команду rm, чтобы удалить файл с именем article.txt:

Допустим, у нас есть каталог с именем Dir1, содержащий подкаталоги и файлы, чтобы удалить его, нам понадобится модификатор -r. Команда будет выглядеть так:

Опция -r рекурсивно удаляет каталоги и их содержимое.

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

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

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

Вы можете использовать вариации всех перечисленных выше команд для удаления файлов с другими расширениями, такими как .txt, .doc, .odt и другими.

Опция -f позволяет принудительно удалить всё, что находится в каталоге. Команда будет выглядеть так:

Приведённая выше команда рекурсивно и принудительно удалит всё, что находится в каталоге Dir1, не запрашивая подтверждения в терминале.

Вы также можете удалить несколько папок за раз. Следующая команда удалит три каталога Dir1, Dir2 и Dir3.

Поздравляем, вы успешно освоили основные функции команд rm и rmdir, позволяющие удалить файл или папку в Linux!

Итоги

Случайное удаление папки или даже одного файла в Linux может привести к серьёзным проблемам. Вот почему важно освоить две основные команды для удаления файлов и каталогов — rm и rmdir. В этой статье мы рассмотрели эти две команды и различные опции, которые позволяют их модифицировать.

Надеемся, что эта статья была полезной! И помните, что после удаления файла или каталога из Linux вы не сможете их восстановить, поэтому будьте предельно осторожны! Удачи.

Читайте также:  Патчи для windows life

Ольга уже около пяти лет работает менеджером в сфере IT. Написание технических заданий и инструкций — одна из её главных обязанностей. Её хобби — узнавать что-то новое и создавать интересные и полезные статьи о современных технологиях, веб-разработке, языках программирования и многом другом.

Источник

bash. удаление строк из файла по шаблону.

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

Если я правильно понял что требуется, то примерно так:
grep -v «pattern» source.txt > out.txt

нее, рыбята.. предполагалось, что есть какая-то утилита которая понимает файловые шаблоны.

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

egrep -v ‘pattern’ file

все приведенные варианты именно так и работают.

в файле есть такая строка: /path/to/some/file.h

я хочу эту строку удалить. выполняю : grep -v «*.h» src.txt > dst.txt

но строка выводится в целевой файл.

У тебя неправильный регэксп, правильный будет:
grep -Ev «\.h$»

Кстати, все вышеприведённые варианты правильные.

спасибо. так работает.

а не подскажите, каким образом grep`у можно указать список шаблонов? т.е. как разделять? в общем Вы поняли)

ну как же они правильные, если я в точности так и выполняю, а результат не тот?

grep -Ev «\.(h|obj|cpp)$» например

потому что регекспы != wildcards

Ещё раз повторяю: у тебя неправильный регэксп.

Можно разделять регэкспы |, это будет OR; можно записать их в файл по одному на строку и вызывать grep -f patterns.txt file.txt.

В общем, man grep и man 7 regex.

спасибо еще раз :yes

позвольте еще такой вопрос.. список шаблонов игнорирования у меня в виде: «*.zip;*.h;*-suffix.7z». скажите, есть способ заставить grep использовать такую запись в качестве списка игнорирования? или придется этот список сначала обработать до нужного вида?

Делай действия по очереди. Будет меньше ошибок.

Источник

Как удалить файл через терминал Linux

Эта небольшая заметка ориентирована на совсем начинающих. Сегодня мы рассмотрим как удалить файл linux через терминал. Для более опытных пользователей это элементарная задача, но новичкам надо с чего-то начинать. Знать как работать с файлами в консоли очень важно.

К тому же удаление из консоли дает много преимуществ и большую гибкость. Например, с помощью специальной команды вы можете полностью стереть файл с жесткого диска, так что его уже ни за что невозможно будет восстановить или одной командой с помощью специальных символов, условий или регулярных выражений удалить сотни ненужных файлов в одном каталоге или подкаталогох соответствующих определенному критерию.

В Linux для удаления файлов предусмотрена стандартная утилита rm. Как и все остальные, стандартные утилиты в имени rm тоже заложена определенная идея. Это сокращение от английского слова Remove.

Удаление файлов в Linux

Чтобы удалить файл linux достаточно передать в параметрах команде адрес файла в файловой системе:

Чтобы удалить все файлы, начинающиеся на слово file можно использовать специальный символ *, означает любой символ в любом количестве:

Эта команда удаления файла в linux должна использоваться очень осторожно, чтобы не удалить ничего лишнего. В утилите есть опция -i, которая заставляет программу спрашивать пользователя перед тем, как удалить файл linux:

rm: удалить пустой обычный файл «/home/user/file»?

Читайте также:  Stellar phoenix windows data recovery pro repack

Если файлов очень много, вы уверены в правильности команды и отвечать каждый раз y неудобно, есть противоположная опция — f. Будут удалены все файлы без вопросов:

rm -f /home/user/file*

Для удаления директорий, вместе с файлами и поддиректориями используется опция -R, например:

rm -Rf /home/user/dir

Будет удалено все что находиться в папке dir, и эта папка. Только будьте бдительны, чтобы не получился знаменитый патч Бармина:

Не стоит выполнять эту команду в своей системе, как видите, она удаляет все файлы в файловой системе Linux.

Удаление файла в linux также возможно с помощью утилиты find. Общий синтаксис find:

find папка критерий действие

Например, мы хотим удалить файл linux по имени:

find . -type f -name «file» -exec rm -f <> \;

Будут найдены все файлы с именем file в текущей папке и для них вызвана команда rm -f. Можно не вызывать стороннюю утилиту, а использовать действие delete:

find . -type f -name «file» -delete

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

find . -regex ‘\./[a-f0-9\-]\.bak’ — delete

Или удалить файлы старше определенного строка, может быть полезно для удаления старых логов:

find /path/to/files* -mtime +5 -exec rm <> \;

Будет выполнено удаление файлов через терминал все файлы в папке старше 5-ти дней.

Чтобы полностью стереть файл, без возможности восстановления используйте команду shred. Во время удаления файлов с помощью утилиты rm удаляется только ссылка на файл, само же содержимой файла по-прежнему находиться на диске, пока система не перезапишет его новыми данными, а пока этого не случится файл можно легко восстановить. Принцип действия утилиты такой — после удаления файла, его место на диске несколько раз перезаписывается.

Опцией -n — можно указать количество перезаписей диска, по умолчанию используется 3. А если указать опцию -z программа при последней перезаписи запишет все нулями чтобы скрыть, уничтожение файла.

Выводы

Вот и все. Теперь вы знаете как удалить файл в Ubuntu, как видите, делать это не так уж сложно. Если у вас остались вопросы, пишите в комментариях!

Источник

удаление файлов по шаблону

Есть дерево дерево каталогов:

Т.е. в subfolder есть проект, в проекте есть подпроект, а в каждом проекте есть /logs/ , где лежит куча файлов логов нескольких типов:

нужно оставить только 15 последних файлов каждого типа.

Я знаю как сделать эту задачу циклом-в-цикле, но мне это не нравится. Должен же быть способ решить это нормально средствами bash

2 ответа 2

Не подзакладываясь на чудные имена, считая, что sort -g корректно определит «последние» и что filetype не содержит точек можно как-то так:

ключ -i у rm ‘а после отладки можно будет убрать.

find /folder/subfolder/ -mindepth 3 -type f -mtime +1 -name ‘*.log*’ -not -regex ‘.*\([a-z]\(1\|2\|3\|4\|5\|6\|7\|8\|9\|10\|11\|12\|13\|14\|15\)\.5185\).*’

-mindepth 3 -минимальный уровень вложения файлов, по задаче это 3 каталог

-type f -только файлы

-mtime +1 — файлы старше 1-го дня, что бы не затереть текущий лог без цифр

-name ‘*.log*’ — маска имени файла

-not — отрицание следующего выражения

-regex ‘.*\([a-z]\(1\|2\|3\|4\|5\|6\|7\|8\|9\|10\|11\|12\|13\|14\|15\)\.1194\).*’ -шаблон имени файла, [a-z] любая буква, за ней цифры от 1 до 15, после точка и 2261 4 цифры года.

Писал по памяти, протестировать сейчас негде, если после теста все ок, добавить в конце -exec rm -f <> \; — это удалит все найденные файлы.

Источник

Оцените статью