Удалить все файлы кроме одного linux

How to delete all files in a directory except some?

I need to delete all files in a directory, but exclude some of them. For example, in a directory with the files a b c . z , I need to delete all except for u and p . Is there an easy way to do this?

The answers below are a lot better, but you could just make the files to save read-only, delete all, and then change them back to their original permissions (as long as you don’t use rm -f). You’d have to know what permissions to restore and you’d have to know that nothing needed write access to them during the process. This is why the other answers are better.

17 Answers 17

What I do in those cases is to type

Then I press Ctrl + X , * to expand * into all visible file names.

Then I can just remove the two files I like to keep from the list and finally execute the command line.

@SantoshKumar: That doesn’t make sense to me. The expansion will always work, it doesn’t depend on what command you want to use afterwards.

@OliverSalzburg Sorry, the combination is little bit confusing. I think you should write like Ctrl + Shift + x + *

To rm all but u,p in bash just type:

This requires the following option to be set:

You need to shopt -s extglob , @Ashot. Also, it’s just files, not directories, which is why I’ve removed the -rf options in your command.

If you need to exclude one file of a selection of files, try this: rm !(index).html . This will delete all files ending in «.html» with the exception of «index.html».

find . ! -name u ! -name p -maxdepth 1 -type f -delete 
  • ! negates the next expression
  • -name specifies a filename
  • -maxdepth 1 will make find process the specified directory only ( find by default traverses directories)
  • -type f will process only files (and not for example directories)
  • -delete will delete the files

You can then tune the conditions looking at the man page of find

  • Keep in mind that the order of the elements of the expressions is significant (see the documentation)
  • Test your command first by using -print instead of -delete
find . ! -name u ! -name p -maxdepth 1 -type f -print 

Источник

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

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

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

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

В Linux шаблон оболочки представляет собой строку, состоящую из следующих специальных символов, которые называются подстановочными знаками или метасимволами:

  1. * — соответствует нулю или более символов
  2. ? — соответствует любому одиночному символу
  3. [seq] — соответствует любому символу в seq
  4. [!seq] — соответствует любому символу, не указанному в seq

Здесь мы рассмотрим три возможных метода, в том числе:

Удаление файлов с помощью расширенных операторов сопоставления с образцом

Различные расширенные операторы сопоставления с образцом перечислены ниже, где список-шаблонов — это список, содержащий одно или несколько имен файлов, разделенных символом | :

  1. *(список-шаблонов) — соответствует нулю или более вхождений указанных шаблонов
  2. ?(список-шаблонов) — соответствует нулю или одному вхождению указанных шаблонов
  3. +(список-шаблонов) — соответствует одному или нескольким вхождениям указанных шаблонов
  4. @(pattern-list) — соответствует одному из указанных шаблонов
  5. !(список-шаблонов) — соответствует чему угодно, кроме одного из заданных шаблонов

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

1. Чтобы удалить все файлы в каталоге, кроме имени файла, введите следующую команду:

2. Чтобы удалить все файлы, кроме filename1 и filename2:

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

4. Затем вы можете удалить все файлы в каталоге, кроме всех файлов .zip и .odt , следующим образом, отображая то, что сделанный:

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

Удалить файлы с помощью команды поиска Linux

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

$ find /directory/ -type f -not -name 'PATTERN' -delete $ find /directory/ -type f -not -name 'PATTERN' -print0 | xargs -0 -I <> rm <> $ find /directory/ -type f -not -name 'PATTERN' -print0 | xargs -0 -I <> rm [options] <>

5. Следующая команда удалит все файлы, кроме файлов .gz в текущем каталоге:

$ find . -type f -not -name '*.gz'-delete

6. Используя конвейер и xargs, вы можете изменить приведенный выше случай следующим образом:

$ find . -type f -not -name '*gz' -print0 | xargs -0 -I <> rm -v <>

7. Рассмотрим еще один пример. Приведенная ниже команда удалит все файлы, кроме .gz , .odt и . .jpg файлы в текущем каталоге:

$ find . -type f -not \(-name '*gz' -or -name '*odt' -or -name '*.jpg' \) -delete

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

Однако этот последний подход работает только с bash. Здесь переменная GLOBIGNORE хранит разделенный двоеточиями список шаблонов (имен файлов), которые следует игнорировать при раскрытии пути.

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

$ cd test $ GLOBIGNORE=*.odt:*.iso:*.txt

В этом случае все файлы, кроме файлов .odt , .iso и .txt , будут удалены из текущего каталога.

Теперь запустите команду для очистки каталога:

После этого отключите переменную GLOBIGNORE:

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

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

Источник

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

find /directory/ -type f -not -name 'PATRÓN' -delete find /directory/ -type f -not -name 'PATRÓN' -print0 | xargs -0 -I <> rm [opciones] <>

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

find . -type f -not -name '*.jpg'-delete find . -type f -not -name '*.jpg' -print0 | xargs -0 -I <> rm -v <>

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

find . -type f -not \(-name '*pdf' -or -name '*odt' \) -delete

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

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

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

cd Descargas GLOBIGNORE=*.pdf:*.mp4:.*mp3 rm -v * unset GLOBIGNORE

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

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

Источник

Читайте также:  Запущенные процессы linux ubuntu
Оцените статью
Adblock
detector