Linux удалить файлы по маске

Обновлено: 05.07.2024

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

В качестве shell-оболочки рассмотрим bash, как самую используемую. А в качестве операции над файлами рассмотрим удаление, как самую деструктивную.

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

В названии файла есть служебный символ bash

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


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

С полным списком служебных символов и механизмом экранирования в bash можно ознакомиться в man bash. Раздел QUOTING.

Имя файла начинается с дефиса

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

Удаляем по wildcard

Если удаление файлов попадает под wildcard-маску, то можно удалить всю группу файлов:

Файлы с управляющим символом в названии

В названии файла может встречаться управляющий ASCII-символ, такой как перевод строки (\n), табуляция (\t), backspace (\b). Это символы с ASCII-кодами менее 0x20, а также символы DELETE и ESC. Для удаления таких файлов подходит конструкция:


Другим способом удаления таких файлов являяется ввод управляющего символа с клавиатуры. Для этого нужно воспользоваться комбинацией клавиш, которая экранирует следующий введенный символ, тем самым запрещая системе обрабатывать его. Как правило, эта комбинация CTRL+V. Точно убедиться в этом можно с помощью команды stty -a, посмотрев на параметр lnext. Удалим файл, содержащий символ ESC:

Удаление файлов с символами utf8

Если имя файла содержит символ в кодировке utf8, который мы не можем набрать на клавиатуре, то удалить такой файл можно выделением его мышкой, копированием в буфер обмена и последующей вставкой на ввод команды rm. Главное условие состоит в том, что наш терминал должен работать в кодировке utf8. Кодировка выставляется в настройках терминала. Будь то xterm, putty или брутальный linux tty.

Перекодировка имени файла

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


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

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

Если вы встретили такие символы в примонтированном media-носителе или смонтированном разделе Windows, не спешите ничего перекодировать. Возможно, вы просто указали неправильные опции монтирования.

Автокомплит

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

Удаляем файл через меню выбора

Если мы дошли сюда, дело плохо. Попробуем удалить конкретный файл, составив для этого меню выбора. В итоге, все что нам останется сделать – это выбрать нужный пункт меню вместо ввода имени файла. Для этого нам нужно запрограммировать действие, которое будет происходить с файлом или файлами после ввода нами нужных пунктов меню.

Удаление по номеру inode

Удалить файл можно по его номеру inode. Номер inode уникально идентифицирует файл в файловой системе. Узнать номер inode можно с помощью команды ls, а удалить – с помощью find. Недостаток этого способа, такой же, как у предыдущего. Неудобно, в случае большого числа файлов.

Удаление по hex-коду

И нельзя не упомянуть один суровый метод. Удаление по hex-кодам. Суть такова: мы узнаем hex-коды всех байтов в имени файла, а затем удаляем файл, указывая вместо имени hex-коды.

Казалось бы, простая задачка. В Windows все просто - del /S smth.*, готово. Все файлы по маске smth.* в текущей директории и ниже будут удалены.

Может есть ещё какие нибудь способы??

Жестоко

> Может есть ещё какие нибудь способы?

См. -delete в `man find`.

В *nix все просто - rm -r smth.*, готово. Все файлы по маске smth.* в текущей директории и ниже будут удалены.

что значит не работает?

права то на удаление есть?

какую ошибку пишет?

/test$ ls -R
.:
smth.123 smth.1231 smth.12311 -smth sd.1231 smth sd.1231 test

./test:
smth.123 smth.1231 smth.12311 -smth ss.111 smth ss.111
rr@pc:

/test$ rm -rvf *smth*
rm: invalid option -- s
Try `rm ./'-smth sd.1231'' to remove the file `-smth sd.1231'.
Try `rm --help' for more information.
rr@pc:

/test$ ls -R
.:
smth.123 smth.1231 smth.12311 -smth sd.1231 smth sd.1231 test

./test:
smth.123 smth.1231 smth.12311 -smth ss.111 smth ss.111
rr@pc:

/test$ ls -R
.:
gentest.sh smth.123 smth.1231 smth.12311 -smth sd.1231 smth sd.1231 test

./test:
smth.123 smth.1231 smth.12311 -smth ss.111 smth ss.111
rr@pc:

/test$ rm -- *smth*
rr@pc:

./test:
smth.123 smth.1231 smth.12311 -smth ss.111 smth ss.111
rr@pc:

У нас в конторе один из любимейших вопросов на собеседовании: как удалить сто тыщ мильонов файлов с заранее неизвестными названиями в одной директории?
Ответы типа "rm -f /path/to/dir/*" не подходят, поскольку звездочка преобразовывается в список файлов, удовлетворяющих wildmat'у (в данном случае -- все файлы), а у шелла есть ограничение на размер командной строки.
Тот же результат будет у "find /path/to/dir -type f| xargs rm", поскольку, во-первых xargs преобразует весь stdin в одну строку (try: "find /tmp |xargs echo rm"), во-вторых, в именах файлов могут содержаться пробелы, которые не эскейпятся, в-третьих, названия файлов могут начинаться на -, из-за чего rm воспримет имя файла как неизвестную опцию и упадет. Ну и ограничение на длину команды никто не отменял. Первые три проблемы обходятся так:
find /path/to/dir -type f -print0 |xargs -0 rm --
Опция -print0 какбэ говорит команде find, что в качестве разделителей нужно использовать нулевой символ вместо перевода строки, а -0 указывает xargs, что разделитель -- не пробел, а все тот же нулевой символ.

Поэтому правильным ответом считается команда
find . -type f -name 'smth*' -delete
или
find . -type f -name 'smth' -exec rm -f -- "<>" \;

Ну или простенький цикл:
for f in "`find . -type f -name 'smth*'`" ; do rm "$f"; done
по количеству кавычек в котором можно еще и определить степень знания особенностей использования шелла :)

> во-первых xargs преобразует весь stdin в одну строку
а про опцию -n забыли?

Спасибо!

Большое спасибо за понятный мануал, очень помогло.
Второй способ, кстати, не работает - пишет "missing arguments for -exec". Система Ubuntu 8.10, ядро 2.6.27

И, наконец, вот команда, которая будет выполнена для каждого файла:

-exec ln <> /var/www/obsolete \;

Здесь вы также должны дезактивировать знак ;, в противном случае командный процессор интерпретирует его как разделитель команд. Если вы забудете сделать это, find пожалуется, что для -exec отсутствует аргумент.

Удаляем файлы и каталоги по заданным критериям или маске. Есть несколько вариантов удаления. Прицеп прост, собрать структуру файлов или директорий и удалить.

Для сбора данных как всегда используем команду find, но многие не смотрели ее дополнительных возможностей. Есть ключ -delete с помощь которого можно сразу и удалить выбранные объекты.

Удаляем все пустые каталоги по маске

А если каталог или директория заполнена прибегаем к команде rm .

Как найти все каталоги по маске и удалить их содержимое в Linux

Вариант 1. Фильтр find -name

Находим каталоги по маске

Находим каталоги по маске и удаляем каталоги и файлы рекурсивно

Вариант 2. Фильтр grep

Находим каталоги по маске

Находим каталоги по маске и удаляем каталоги и файлы рекурсивно


Автор первичной редакции:
Алексей Максимов
Время публикации: 05.06.2018 16:09

Удаление файлов с помощью rm

Для того чтобы удалить файл в Linux через терминал необходимо использовать команду « rm » (от английского «remove»). Данная команда удаляет все указанные ей файлы, но по умолчанию не удаляет каталоги. Чтобы позволить команде « rm » удалять каталоги нужно добавить опцию « -r » или « -R ». Более подробно об этом во второй половине статьи.

Также нужно отметить, что команда « rm » не выполняет физическое удаление данных, вместо этого указанные файлы просто удаляются из файловой системы, а занимаемое ими место маркируется как свободное. Это означает, что после удаления данные остаются на диске и пока они не будут перезаписаны другими данными, их можно будет восстановить с помощью специальных программ. Для физического удаления данных с перезаписью диска следует использовать команду « shred ».

В общем случае для удаления файла в Linux через терминал достаточно просто ввести в терминал « rm » и указать имя документа. Например, для того чтобы удалить « file1.txt » из текущего каталога нужно выполнить вот такую команду:

удаление файла

Если удаляемый файл находится не в текущем каталоге, то в терминале нужно указать полный путь. Например, это может выглядеть вот так:

удаление файла полный путь

При необходимости, с помощью команды « rm » можно удалить сразу несколько файлов. Для этого просто введите « rm » и перечислите имена через пробел, например:

rm file1 file2 file3

удаление нескольких файлов

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

удаление файлов по маске

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

удаление всех файлов по маске

Аналогичным способом можно удалить все файлы в определенной папке:

удаление файлов в папке по маске

Главное, соблюдать осторожность, так как при использовании масок можно удалить что-то лишнее.

Команды для удаления большого количества файлов в Linux

Удаление старых файлов linux по маске чаще всего осуществляется следующим образом:

Веб-сервер указан для примера. Синтаксис очень прост — команда принудительно удалит все файлы с расширением .log в указанном каталоге, при этом удаление будет рекурсивным(-r — recursive) и подтверждения система при этом спрашивать не будет (-f — force).

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

Если rm -rf не помогает — удалять файлы следует в цикле for. Для каждого файла будет отдельная операция удаления и никаких ограничений системы здесь ожидать не приходится.

Синтаксис в простейшем случае может выглядеть так:

for f in /var/log/apache2/*.log; do rm «$f»; done

В цикл for можно добавить любую дополнительную логику.

Удаление старых файлов в Linux по Cron

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

В примере удаляются сессии РНР для сайта старше 7 дней.

linux-delete-old-files.jpg

В цикле то же самое можно сделать так:

for f in /tmp/logs/*.log

Приведенное выражение, как и любой другой цикл можно поместить в файл, сделать его исполняемым и с тем же успехом выполнять по Cron

Linux: Как найти и удалить файлы по шаблону одной командой

Это можно сделать несколькими методами, но самый простой — с использованием флага «-delete», который есть у команды «find».

Пример использования:
Допустим нам нужно удалить все «*.jpg» файлы в текущей папке, и во всех подпапках.
Тогда команда удаления будет выглядеть следующим образом:

Удобно сначала просто найти/выбрать все файлы для удаления, выполнив эту команду без флага «-delete», чтобы быть уверенным, что мы будем удалять именно те файлы, которые нужно, а затем выполнить эту же команду, добавив к конце «-delete».

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

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

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

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

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

rm -f /home/user/file*

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

rm -Rf /home/user/dir

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

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

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

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

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

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

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

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

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

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

Linux удаление файлов по маске

подскажите как с помощью rm удалить все файлы с расширением *.txt ?
заранее спасибо.

Ответить | Правка | Cообщить модератору

  • Удалить файлы по маске *.txt, chainik, 11:49 , 13-Мрт-09, (1)
  • Удалить файлы по маске *.txt, djaarf, 14:28 , 13-Мрт-09, (2)
  • Удалить файлы по маске *.txt, Veon, 16:52 , 13-Мрт-09, (3)
    • Удалить файлы по маске *.txt, djaarf, 21:19 , 13-Мрт-09, (5)

    >доброго дня,
    >
    >подскажите как с помощью rm удалить все файлы с расширением *.txt ?
    >
    >заранее спасибо.

    Откуда удалить? Со всех хостов инета?

    >доброго дня,
    >
    >подскажите как с помощью rm удалить все файлы с расширением *.txt ?
    >
    >заранее спасибо.

    Чудесная утилита find тебе поможет.

    >доброго дня,
    >
    >подскажите как с помощью rm удалить все файлы с расширением *.txt ?
    >
    >заранее спасибо.

    find /home/vasya -name “*.txt” | xargs rm

    В зависимости от контретной ситуации

    >>доброго дня,
    >>
    >>подскажите как с помощью rm удалить все файлы с расширением *.txt ?
    >>
    >>заранее спасибо.
    >
    >find /home/vasya -name “*.txt” | xargs rm

    Можно обойтись одним find
    find path -type f -name “*.txt” -delete
    >
    >rm *.txt, rm -r *.txt
    >
    >В зависимости от контретной ситуации

    Удаление каталога с файлами

    Удаляем конкретный каталоги с файлами.

    rm -dfR ./test/dir1

    Удаляем каталог с файлами по маске

    Приятного использования и удаления.

    Поиск и удаление файлов с помощью find

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

    Например, для того чтобы найти и удалить все txt-файлы в текущей и во всех вложенных папках можно выполнить вот такую команду:

    удаление файлов с помощью поиска

    Чтобы узнать больше об использовании « find » введите в терминал команду « man find ».

    Удаление файлов по маске с фтп

    Есть доступ к фтп-директории на чтение, запись, удаление.
    В крон запихиваю скрипт, который будет забирать оттуда файлы по маске, и по той же маске их удалять, дабы каждый раз не забирать одно и тоже.

    Что Я Делаю Не Так?

    116322:-1692569248.jpg

    tuxlor.jpg

    О, теперь на ЛОРе можно говорить «руки из Zhopin »

    tuxlor.jpg

    У тебя руки из Zhopin

    116322:-1692569248.jpg

    если руки золотые, не важно откуда они растут

    Ты всё перепутал, это не золото. Это просто говно такого цвета.

    116322:-1692569248.jpg

    кроме анонимного ослоумия, посты будут? Полезные посты я имею ввиду

    101460:-1897149992.jpg

    Страшная поделка. IMHO удалять можно только то, что скачали.

    На перле или другом языке это более просто и надежно.

    Чем не устроил обычный ftp клиент ? Нафига этот pftp ?

    дебаг у pftp есть. Включить да посмотреть. Может нужно отключить интеракив в явном виде? pftp -i . ?

    105962:959150243.jpg

    tuxlor.jpg

    У тебя руки из Zhopin

    [quoteЧто Я Делаю Не Так?

    tuxlor.jpg

    У тебя руки из Zhopin

    tuxlor.jpg

    У тебя руки из Zhopin

    116322:-1692569248.jpg

    я и удаляю то что скачиваю.
    ftp -p = pftp – всё это обычный фтп клиент
    страшная поделка взятая из 99,99% примеров использования фтп клиента в баш, использовал материал которым располагал, не более.
    Что бы сделать это на перле наверно нужно знать перл, не?

    116322:-1692569248.jpg

    спасибо за пример, решением стало sleep в 200 миллисекунд между скачиванием и удалением.
    И теперь я знаю как более красиво использовать код в баше, ещё раз моя благодарность.

    101460:-1897149992.jpg

    Если ты знаешь bash, то понять не сложно.

    105962:959150243.jpg

    Вот ещё подобная тема недавно поднималась.

    Ну и да – вариант с задержкой я для проверки привёл. Ты не можешь быть уверен, что она всегда сработает. Раз сервер игнорит команды он будет делать это и дальше.

    В смысле ты подобрал задержку исходя из скорости передачи определённого объёма данных.

    Это случайные величины. Нельзя так делать. Нужно более надёжное решение.

    116322:-1692569248.jpg

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

    tuxlor.jpg

    ziemin , это я понимаю, просто эта вся шняга была чисто в образовательных целях. +владелец фтп-сервера говорил что при скачивании файла, удалении (т.е. при определённых действиях), запускается некий скрипт (причём при помощи какого то модуля для фтп сервера – modexec вроде бы), который что то там делает. Что происходит по ту сторону, загадка, но возможно, этому и требуется 200 мс, так как с этой задержкой удачно скачивались, а затем удалялись, десятки файлов больших объёмов.

    111506:869939704.jpg

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

    не знаешь и не желаешь знать про OpenSSH и rsync

    116322:-1692569248.jpg

    поподробней пожалуйста, я неофит и не не очевидна мне ваша мысль
    первое тулзы для соединения и передачи файлов по ssh
    второе синхронизация двух папок на двух юникс машинах
    как мне это поможет при работе с фтп?

    111506:869939704.jpg

    FTP протокол сам по себе очень старый, и его лучше не использовать. Лучше используйте ssh, он намного более надёжный, удобный, и безопасный.

    rsync решит ваши проблемы одной командой без всяких нелепых костылей и задержек. И даже более того: она умеет качать только то, что действительно необходимо скачать, а не всё подряд. Естественно она НЕ работает по FTP.

    Поинтересуйтесь у администратора сервера, возможно ssh там уже есть(в 146% это так).

    116322:-1692569248.jpg

    действительно, погуглив, ssh практически полноценная замена ftp.
    Просто опять же человеческий фактор, просить администратора что то поменять просто так на его хорошо работающем сервере – сложная задача.
    Поэтому и скачу из имеющихся возможностей

    111506:869939704.jpg

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

    обычная практика: держать SSH для себя, и FTP для клиентов. Потому что 95% клиентов FTP достаточно. Ну потому доступ по SSH по умолчанию либо закрыт, либо открыт, но о нём вам не рассказали. Просто надо пообщаться с администратором, обычно SSH доступ дают без проблем.

    ssh практически полноценная замена ftp.

    нет. Ssh это намного больше, чем «заменитель ftp». И беглое гугленье вам не поможет, там Over9000 возможностей, потому вы скорее вссего наткнулись не совсем на то, что вам нужно. Наверное на sftp. Это конечно годно, но это только один из вариантов.

    для вашего случая ИМХО оптимально rsync over ssh, если конечно на сервере есть rsync(если нет, то rsync тоже можно, но sftp в этом случае не хуже).

    116322:-1692569248.jpg

    понял, просто для админа сервера я «немного продвинутый клиент», поэтому ssh мне точно не светит. Но спасибо, уже копаю в этом направлении, ваш пост оказался мегаполезен.

    111506:869939704.jpg

    для админа сервера я «немного продвинутый клиент»

    учитывая, что 95% клиентов _полные_ _идиоты_, а оставшиеся 5% — суперхакеры с ЧСВ Over9000, то такой клиент как вы — просто счастье ☺

    Есть каталог rare, в нём - куча подкаталогов и файлов. Нужно удалить все .m3u файлы. Делаю:

    однако эта команда оставляет .m3u файлы, если в путях есть пробелы. Как заставить её обрабатывать пробелы?




    Добавить двойные кавычки



    Spirit_of_Stallman ★★★ ( 14.01.13 09:47:32 )
    Последнее исправление: Spirit_of_Stallman 14.01.13 09:56:38 (всего исправлений: 1)


    Отличный совет, чувак. Я сейчас удалил половину каталога с музыкой.


    Тогда экранированные двойные кавычки.

    derlafff ★★★★★ ( 14.01.13 09:48:00 )
    Последнее исправление: derlafff 14.01.13 09:48:31 (всего исправлений: 1)




    Ууу, кто-то только что спалил виртуала


    /Music -type f -name ".txt" -delete в моем случае просто удалило все .txt файлы. С чего у вас удалилась музыка, если вы удаляете .m3u только?

    Update:
    Не нужно никаких костылей вроде xargs, find умеет удалять файлы с параметром -delete. Но для начала без него, проверьте, чтобы find искал все необходимые файлы, а потом уже дописывайте -delete, чтобы их удалить.

    удалить файлы Linux

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

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

    И самое лучшее то, что вам не нужно будет устанавливать какую-либо программу, это легко сделать с помощью таких команд, как rm и find. То есть программы, которые уже предустановлены в любом дистрибутиве Linux. И, конечно же, метод будет основан на поиске шаблонов и использовании этих совпадений для удаления только того, что вы хотите.

    Ну чтобы там исключить несколько альтернатив, Кто они такие…

    Удалить файлы из каталога с помощью rm

    Ну, чтобы использовать команда rm Чтобы избавиться от того, что вы чувствуете, вы должны знать перед некоторыми способами выявления закономерностей:

    • * (список шаблонов) - соответствует нулю или более вхождений указанных шаблонов
    • ? (список шаблонов) - соответствует нулю или одному вхождению указанных шаблонов
    • + (список шаблонов) - соответствует одному или нескольким экземплярам указанных шаблонов
    • @ (список шаблонов) - соответствует одному из указанных шаблонов
    • ! (список шаблонов) - соответствует чему угодно, кроме одного из заданных шаблонов

    к активировать extglob Чтобы использовать их, вы должны сначала выполнить следующую команду:

    глаз! Я не указываю это, но предполагается, что у вас есть разрешения на выполнение этих операций и что вы находитесь внутри этого каталога, когда выполняете команду rm. Будьте осторожны с этим, потому что, если вы запустите его по другому пути, вы можете удалить файлы, которые вам не нужны. То есть перед выполнением этих команд убедитесь, что вы вошли в нужный каталог с помощью cd.

    Теперь вы можете использовать rm, чтобы удалить все, что захотите. Например, удалить все файлы из каталога, кроме тех, которые соответствуют имени «Lxa»:

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

    Вы можете удалить все файлы, минус те, с расширением .mp3. Например:

    В конце вы можете вернуться к отключить extglob:

    Удалить файлы из каталога с помощью find

    Другая альтернатива rm - используйте find, чтобы удалить то, что вам нравится. Вы можете использовать канал и xargs с rm или использовать параметр -delete для поиска. То есть общий синтаксис будет таким:

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

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

    Конечно, вы можете сделать то же самое с | и xargs, как в предыдущем примере. Кстати, мы использовали -не отрицать, но вы можете удалить это, чтобы сделать его положительным, то есть удалить совпадающие шаблоны, а не исключать их.

    Удалите файлы из каталога с помощью переменной GLOBIGNORE

    Наконец, есть Другая альтернатива чтобы найти и rm, и он использует переменную среды, чтобы указать файлы, которые вы хотите удалить или исключить. Например, представьте, что вы хотите удалить все файлы в каталоге с именем Downloads, сохранив файлы .pdf, .mp3 и .mp4. В этом случае вы можете сделать следующее:

    Содержание статьи соответствует нашим принципам редакционная этика. Чтобы сообщить об ошибке, нажмите здесь.

    Полный путь к статье: Любители Linux » GNU / Linux » Системное администрирование » Как удалить все файлы в каталоге, кроме одного

    Читайте также: