- Удалите все файлы, кроме нескольких, из папки в Unix
- 4 ответа 4
- как удалить файлы, кроме некоторых?
- Re: как удалить файлы, кроме некоторых?
- Re: как удалить файлы, кроме некоторых?
- Re: как удалить файлы, кроме некоторых?
- Re: как удалить файлы, кроме некоторых?
- Re: как удалить файлы, кроме некоторых?
- Re: как удалить файлы, кроме некоторых?
- Как удалить все файлы в каталоге, кроме одного
- Удалить файлы из каталога с помощью rm
- Удалить файлы из каталога с помощью find
- Удалите файлы из каталога с помощью переменной GLOBIGNORE
- Использование find-удаление всех файлов / каталогов (в Linux), кроме любого
- 11 ответов
- Удалить все файлы, кроме некоторых, из каталога
Удалите все файлы, кроме нескольких, из папки в Unix
Я часто сталкиваюсь с этой проблемой. У меня есть набор файлов в папке, и я хотел бы удалить все из них, кроме нескольких.
Например: у меня есть файлы, названные по дате создания (например, 11-1-11.tar, 10-1-11.tar и т.д.). Теперь я хотел бы удалить файлы, такие как 10-1-11, 9-1-11 и так далее, но не некоторые другие файлы. В основном я хотел бы обеспечить, что все должно быть удалено и что следует сохранить. Как бы я это сделал?
4 ответа 4
Если это BASH, вы можете использовать расширенную глобализацию. Включить:
shopt -s extglob
(Поместите это в ваш .bashrc если хотите, или просто включите, когда вам это нужно.)
А затем, например, удалить все файлы, кроме filename1 и filename2
Вы также можете использовать подстановочные знаки, такие как *.
Или вы можете удалить все те, которые соответствуют шаблону:
удалит все # — # — #. tar-файлы (где числа имеют 1 или более цифр).
Неясно, будет ли это соответствовать вашим потребностям или нет. Подробнее здесь.
Если имя файла соответствует дате создания файла, может быть проще удалить файлы старше определенного дня.
Это легко достигается с помощью команды find:
это приведет к удалению файлов в /home/john/files , дата модификации которых превышает 30 дней назад.
Вы также можете делать то, что вы хотите с tmpwatch
удалит все файлы в каталоге старше одного дня с момента последнего использования (-m).
Я думаю, вы можете использовать несколько команд UNIX в одном канале, и это решит вашу проблему. Одним из возможных решений является использование find | grep | xargs rm -rf . Например:
$ find /path/to/directory/tree -type f | grep -v -E -f /path/to/exclude/file | xargs rm -rf
Для исключения некоторых файлов просто поместите их имена в файл /path/to/exclude/file . Например:
Для предотвращения некорректного стирания важных файлов предлагаю сделать резервную копию всех файлов. Также полезно использовать xargs с опцией -p , которая . Prompt the user about whether to run each command line and read a line from the terminal.
Можно использовать инструмент find без grep/xargs. Это будет что-то вроде этого: find /path/to/tree -type f ! -name «exlude_pattern»
Перед использованием этих команд внимательно прочитайте справочные страницы для find/grep/xargs ! Они могут быть очень опасными :).
Источник
как удалить файлы, кроме некоторых?
Как, используя rm, удалить огромное кол-во файлов кроме каких-то нужных??
Быстренько ответели! 🙂
Re: как удалить файлы, кроме некоторых?
Открой для себя чудесный мир регулярных выражений 🙂
Re: как удалить файлы, кроме некоторых?
$ for ((i = 0; i touch $i;
> done;
$ ls -al
total 0
drwxr-xr-x 2 YurkovVV Админист 0 Jan 9 07:56 .
drwxr-xr-x 8 YurkovVV Админист 0 Jan 9 07:55 ..
-rw-r—r— 1 YurkovVV Админист 0 Jan 9 07:56 0
-rw-r—r— 1 YurkovVV Админист 0 Jan 9 07:56 1
-rw-r—r— 1 YurkovVV Админист 0 Jan 9 07:56 2
-rw-r—r— 1 YurkovVV Админист 0 Jan 9 07:56 3
-rw-r—r— 1 YurkovVV Админист 0 Jan 9 07:56 4
-rw-r—r— 1 YurkovVV Админист 0 Jan 9 07:56 5
-rw-r—r— 1 YurkovVV Админист 0 Jan 9 07:56 6
-rw-r—r— 1 YurkovVV Админист 0 Jan 9 07:56 7
-rw-r—r— 1 YurkovVV Админист 0 Jan 9 07:56 8
-rw-r—r— 1 YurkovVV Админист 0 Jan 9 07:56 9
$ for i in `ls —ignore=3` ; do rm -f $i;done;
$ ls -al
total 0
drwxr-xr-x 2 YurkovVV Админист 0 Jan 9 08:01 .
drwxr-xr-x 8 YurkovVV Админист 0 Jan 9 07:55 ..
-rw-r—r— 1 YurkovVV Админист 0 Jan 9 07:56 3
Re: как удалить файлы, кроме некоторых?
Во-первых, всё то, что ты понаписал, будет работать только с «хорошими» именами файлов, а во-вторых, у тебя действительно имя группы русскими буквами? Это ж ещё додуматься надо.
Re: как удалить файлы, кроме некоторых?
Под «хорошими» подразумевается regexp.
Хорош оффтопить, это же MSYS. 😉
Re: как удалить файлы, кроме некоторых?
Лучше пример своих файлов приведи, а то меня сейчас съедят некоторые!
Re: как удалить файлы, кроме некоторых?
find . -type f -not -name «asdvc» -not -name «sdfb» -print0 |xargs -0 rm
Удаляем все файлы, кроме имеющих имена «asdvc» и «sdfb». Быстро, качественно, надёжно. Гарантия полгода.
Источник
Как удалить все файлы в каталоге, кроме одного
Иногда вам нужно удалить почти все файлы из каталога, но вы хотите сохранить один или несколько из них. Когда их много, идти по одному — утомительное занятие. Это не лучший вариант, есть способы значительно упростить работу в 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 » Системное администрирование » Как удалить все файлы в каталоге, кроме одного
Источник
Использование find-удаление всех файлов / каталогов (в Linux), кроме любого
Если мы хотим удалить все файлы и каталоги, которые мы используем, rm -rf * .
но что, если я хочу, чтобы все файлы и каталоги были удалены сразу, кроме одного конкретного файла?
есть ли команда для этого? rm -rf * дает легкость удаления на одном снимке, но удаляет даже мой любимый файл/каталог.
11 ответов
find может быть очень хорошим другом:
find * -maxdepth 0 : выберите все, что выбрано * без спуска в какие-либо каталоги
-name ‘b’ -prune : не беспокоить ( -prune ), что соответствует условию -name ‘b’
-o -exec rm -rf ‘<>‘ ‘;’ : call rm -rf все остальное
кстати, еще, возможно, проще, способ был бы переместить или переименовать ваш любимая каталог, чтобы он не мешал:
короткий ответ:
подробности:
мыслительный процесс для приведенной выше команды:
- Список всех файлов (ls)
- перечислить все, кроме выбранного файла (grep-v «z.txt)
- удалить перечисленные файлы (xargs rm)
создать 5 файлов, как показано ниже:
Список всех файлов, кроме z.txt
теперь мы можем удалить (rm) перечисленные файлы с помощью xargs утилиты :
вы можете ввести его в командной строке или использовать эти клавиши в скрипт
P. S. Я предлагаю -i переключатель rm чтобы предотвратить удаление важных данных.
P. P. S Вы можете написать небольшой скрипт на основе этого решения и разместить его в /usr/bin (например, /usr/bin/rmf ). Теперь вы можете использовать его как и обычное приложение:
скрипт выглядит так (просто эскиз):
по крайней мере в zsh
может быть опцией, если вы хотите сохранить только один файл.
если это только один файл, один простой способ-переместить этот файл в /tmp или что-то, rm -Rf каталог, а затем переместите его обратно. Вы можете назвать это простой командой.
другой вариант-сделать find а то grep из того, что вы не хотите (используя -v или непосредственно с помощью одного из find s предикатов), а затем rm ing остальные файлы.
для одного файла я бы сделал первое. Для чего-то большего я бы написал что-то похожее на обычай что thkala сказал.
в bash у вас есть !() оператор glob, который инвертирует согласованный шаблон. Так что удалить все, кроме файла my_file_name.txt , попробуйте это:
Я не знаю о такой программе, но я хотел ее в прошлом в течение нескольких раз. Основным синтаксисом будет:
программа, которую я имею в виду, имеет три режима:
- точное соответствие (с помощью опции -e )
- glob соответствие (по умолчанию, как показано в приведенном выше примере)
- соответствие регулярному выражению (с опцией -r )
он принимает шаблоны, которые будут исключены из командной строки, а затем разделитель — С указанием имен файлов. Кроме того, имена файлов могут быть прочитаны из stdin (если параметр -s дается), каждый по строке.
такую программу не должно быть трудно написать ни на C, ни на командном языке оболочки. И это делает хорошую тренировку для изучения основ Unix. Когда вы делаете это как программа оболочки, вы должны следить за именами файлов, содержащих пробелы и другие специальные символы, конечно.
Я вижу здесь много длинных средств, которые работают, но с a/ b/ c/ d/ e/
это удаляет все, кроме каталога b / и его содержимого (при условии, что ваш файл находится в b/. Тогда просто cd b / и
чтобы удалить все остальное, кроме файла (с именем «filename»), который вы хотите сохранить.
это выглядит нудно, но это, скорее, сейф
- избегает сложной логики
- никогда не используйте rm -rf * , ее результаты зависят от вашего текущего каталога (который может быть / 😉
- никогда не используйте globbing * : его расширение ограничено ARGV_MAX.
- позволяет проверить на ошибки после каждой команды, и, возможно, избежать катастрофы, вызванной следующей команды.
- избегает неприятных проблем причиненных космосом или НЛ в файловые имена.
Источник
Удалить все файлы, кроме некоторых, из каталога
При использовании sudo rm -r , как я могу удалить все файлы, за исключением следующего:
Если вы не укажете, -type f find также выведет список каталогов, которые вам могут не понадобиться.
Или более общее решение с использованием очень полезной комбинации find | xargs :
например, удалить все не TXT-файлы в текущем каталоге:
print0 И -0 комбинация необходима , если есть пробелы в любом из имен файлов , которые должны быть удалены.
Extglob (Extended Pattern Matching) должен быть включен в BASH (если он не включен):
find . | grep -v «excluded files criteria» | xargs rm
При этом будут перечислены все файлы в текущем каталоге, затем перечислены все те, которые не соответствуют вашим критериям (остерегайтесь совпадения с именами каталогов), а затем удалите их.
Обновление : на основе ваших правок, если вы действительно хотите удалить все из текущего каталога, кроме файлов, которые вы перечислили, это можно использовать:
Это создаст резервную копию каталога /tmp_backup (у вас есть права root, верно?), Переместит файлы, которые вы перечислили в этот каталог, рекурсивно удалите все в текущем каталоге (вы знаете, что вы находитесь в правильном каталоге, не так ли?), Переместите вернуться к текущему каталогу все /tmp_backup и, наконец, удалить /tmp_backup .
Я выбираю каталог резервного копирования в качестве корневого, потому что если вы пытаетесь рекурсивно удалить все из корневого каталога, у вашей системы будут большие проблемы.
Конечно, есть более элегантные способы сделать это, но этот довольно простой.
Источник