Как удалить все файлы с расширением linux

Как удалить файлы и каталоги в терминале Linux?

Команды rm и rmdir удаляют файлы и каталоги в Linux, macOS и других Unix-подобных операционных системах. Они похожи на команды del и deltree в Windows и DOS. Эти команды очень мощные и имеют довольно много опций.

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

Как удалить файлы с помощью rm

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

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

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

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

Эта команда удалит все файлы с одним символьным расширением. Например, это удалит File.1 и File.2, но не File.12.

Если файл защищен от записи, вам будет предложено удалить файл. Вы должны ответить с помощью y или n и нажать «Enter».

Чтобы снизить риск использования rm с подстановочными знаками, используйте параметр -i (интерактивный). Для этого необходимо подтвердить удаление каждого файла.

Опция -f (сила) противоположна интерактивной. Он не запрашивает подтверждение, даже если файлы защищены от записи.

Как удалить каталоги с помощью rm

Чтобы удалить пустой каталог, используйте опцию -d (directory). Вы можете использовать подстановочные знаки (* и ?) В именах каталогов так же, как и в именах файлов.

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

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

Если каталог или файл защищен от записи, вам будет предложено подтвердить удаление. Чтобы удалить не пустые каталоги и подавить эти приглашения, используйте вместе параметры -r (рекурсивный) и -f (принудительный).

Здесь требуется осторожность. Ошибка в команде rm -rf может привести к потере данных или неисправности системы. Это опасно, и осторожность — лучшая политика. Чтобы получить представление о структуре каталогов и файлах, которые будут удалены командой rm -rf, используйте команду tree .

Используйте apt-get для установки этого пакета в вашу систему, если вы используете Ubuntu или другой дистрибутив на основе Debian. В других дистрибутивах Linux используйте инструмент управления пакетами вашего дистрибутива Linux.

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

Вы также можете указать путь к команде tree чтобы он запускал дерево из другого каталога в файловой системе.

Команда rm также имеет параметры —one-file-system , —no-preserve-root , —preserve-root , но они рекомендуются только для опытных пользователей. Если вы что-то не так, вы можете случайно удалить все ваши системные файлы.

Как удалить каталоги с помощью rmdir

Есть еще одна команда rmdir , которую вы можете использовать для удаления каталогов. Разница между rm и rmdir том, что rmdir может удалять только пустые каталоги. Он никогда не удалит файлы.

Самый простой случай — удаление одного пустого каталога. Как и в случае с rm , вы можете передать несколько имен каталогов в rmdir или rmdir путь к каталогу.

Удалите один каталог в текущем каталоге, передав его имя в rmdir :

Удалите несколько каталогов, передав список имен в rmdir :

Удалите каталог не в текущем каталоге, указав полный путь к этому каталогу:

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

Читайте также:  Обновление до windows 10 для людей с ограниченными возможностями 2020

Когда rmdir выдает ошибку «Directory not empty», он прекращает обработку каталогов, переданных ему в командной строке. Если вы попросили удалить четыре каталога, а в первом содержались файлы, rmdir выдаст вам сообщение об ошибке и больше ничего не сделает. Вы можете заставить его игнорировать эти ошибки с —ignore-fail-on-non-empty чтобы обрабатывать другие каталоги.

В следующем примере две папки были переданы в rmdir , это work/reports и work/quotes. Параметр —ignore-fail-on-non-empty включен в команду. В папке work/reports находятся файлы, поэтому rmdir не может удалить ее. Опция —ignore-fail-on-non-empty заставляет rmdir игнорировать ошибку и переходить к следующей папке, которую он должен обработать, это work/quotes. Это пустая папка, и rmdir удаляет ее.

Эта команда использовалась.

Вы можете использовать опцию -p (parent), чтобы удалить каталог, а также удалить его родительские каталоги. Этот прием работает, потому что rmdir начинается с целевого каталога, а затем возвращается к родительскому. Теперь этот каталог должен быть пустым, поэтому он может быть удален rmdir, и процесс повторяет шаг назад по пути, предоставленному rmdir.

В следующем примере команда, переданная в rmdir:

Каталоги invoices и work удаляются по запросу.

Используете ли вы Bash или любую другую оболочку? Linux предоставляет гибкие и мощные команды для удаления каталогов и файлов прямо из командной строки терминала. Некоторые люди предпочитают иметь рабочий процесс, который вращается вокруг терминала. У других может не быть выбора в этом вопросе. Они могут работать на серверах без установленного графического интерфейса или в удаленном сеансе в автономной системе, такой как Raspberry Pi. Эти команды идеально подходят для этой группы людей.

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

Источник

Как удалить все файлы в каталоге, кроме одного

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

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

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

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

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

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

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

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

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

Читайте также:  Sed linux ������ ������

Теперь вы можете использовать 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 » Системное администрирование » Как удалить все файлы в каталоге, кроме одного

Источник

Удалить файлы с определённым расширением. Как?

Как удалить файлы с определённым расширением?

Что нужно: удаление файлов с определённым расширением из директории /home.

В /home может быть множество различных папок.

Файлов с разными расширениями может быть много.

Разве в find в «одну строку» можно уложиться?

куча вариантов 1) на питоне напиши, расширения в кортеж, потом с помощью endswith() проверяешь файлы 2) на баше напиши 3) тупо возьми find

find ./ -type f \( -iname \*.txt -o -iname \*.iso \)

find -iregex ‘.*\.\(txt\|html\|iso\)$’

-exec позволяет выполнить команду, подставив найденное имя. ‘<>‘ — найденное имя, экранированная точка с запятой — конец блока -exec.

Добавил решения в первый пост.

Как создать переменную для указания расширений? Иначе получится колхоз.

у линуксового find есть сразу опция -delete

-exec универсальный 🙂 А вникать в этот ман нужно очень долго.

Файлов с разными расширениями может быть много.

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

А раз имя файла, то к нему можно применять регулярки. Например rm *bak

тип регулярки можно задать через -regextype, список типов получить запустив ‘find -regextype help’, но само их описание погребено в недрах info.

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

bash таки умеет массивы.

Если позанудствовать, то ТСа можно понять так, что каталоги с именами типа a.txt/ удалять наверное не надо. 🙂

Если позанудствовать . каталоги с именами типа a.txt/ удалять наверное не надо

. -type f .
Так видно лучше? Никто и не собирался ^)

А, точно, спать надо больше 🙁 Как же так. Наверное прокоментировать хотел пример выше, а взял последнее.

А что, rm -r *.*ext* не катит уже?

1) нерекурсивный
2) на большом количестве файлов тянет на переполнение комстроки

Такой вариант ещё предложили, ну очень удобный.

Такой вариант ещё предложили, ну очень удобный.

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

Может выдать типа:

колхоз, но с утра голова лучше не придумала)

Читайте также:  Windows live movie maker нет звука

Заодно пометь тему решенной

колхоз, но с утра голова лучше не придумала)

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

эм, давно не баше не писал, пардноньте, а то, что я поставил точку перед расширением не поможет?

что я поставил точку перед расширением не поможет?

Нет, потому что маска развернется ещё в for i in *?[xyz]* ★★★★★ ( 14.09.17 11:41:35 )

хм, спасибо, буду знать.

Так в итоге, какое конечное решение будет на баше? Чтобы я протестировал и обновил первый пост.

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

С переменными и, особенно, массивами в bash лучше не связывайся, с ними всегда больше ошибок и тормозов, типичный пример тут Удалить файлы с определённым расширением. Как? (комментарий)

С переменными и, особенно, массивами в bash лучше не связывайся

Смешно. Просто эталонно-гранитное «неасилил».

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

во-первых, оно того не стоит и почти везде лучше

Это просто бла-бла. Чтобы не выглядеть так как и вы голословным, то «всегда» на самом деле означает «там, где нет bash», что мало похоже на топик с таким тегом.

И этот поц говорит о тормозах и пробелах в именах.

Обновил первый пост. Добавил скрипт на баше.

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

Чтобы не выглядеть так как и вы голословным,

Вариант с итерацией по башевскому массиву проходит дерево столько раз, сколько ищется расширений — это может быть и 10 и 20 раз. Многократное замедление прохода по диску — это не голые слова, а суровая реальность. А через год ТС захочет решить те-же задачу тем-же способом, но забудет кавычки или поставит не те и будет удивляться, почему простой скрипт глючит.

Вариант с итерацией по башевскому массиву проходит дерево столько раз, сколько ищется расширений — это может быть и 10 и 20 раз.

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

Хотя. если действительно считать миллисекунды, то да, надо формировать аргументы (-a -name «.$ext»)* для ровно одного вызова find. Можно было б вам защитать 1:1, но вызов несколько find-ов это на много затратнее чем дерево bash-а и потому объяснение правильно лишь случайно :))) А скрипт становится развесистым и трудным для понимания.

но забудет кавычки или поставит не те и будет удивляться

Ну на это я уже отвечал, это эталонное «ниасилил.»

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

Проход по файловой системе действительно долог

Да ещё как. Если это зрелая файлопомойка на терабайт, то огого как долго можно по ней блуждать. А если оно по сети смонтировано, то всё ещё хуже. А если поиск идёт не по имени, а, например, по дате, то это вызов stat() на каждый файл.

Хотя на моём хомяке кеширование здорово помогает и разница не настолько велика, как я ожидал.

Трудночитаемость регэкспов признаю и вообще хотел бы, чтобы у find была опция -names-from-file (так-же, как grep —file=). скостылить для финда чтение паттернов из файла можно, но выглядит это ужасно.

Источник

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