unixforum.org
Форум для пользователей UNIX-подобных систем
В директории удалить все файлы кроме заданных
Модератор: /dev/random
В директории удалить все файлы кроме заданных
Сообщение kt315e » 20.05.2013 15:45
Re: В директории удалить все файлы кроме заданных
Сообщение IMB » 20.05.2013 15:51
Re: В директории удалить все файлы кроме заданных
Сообщение t.t » 06.09.2013 21:57
Re: В директории удалить все файлы кроме заданных
Сообщение drBatty » 06.09.2013 22:07
как-то так.
Это -delete не нужно сразу ставить, лучше сначала без него посмотреть, что получается.
PS: если есть какие-то каталоги, в которые НЕ нужно заходить вообще, используйте -prune
PS2: обход осуществляется в обратном порядке, каталоги тоже обходятся. И симлинки с хардлинками. Будьте внимательны.
PS3: ещё полезно -empty, которая даёт Ъ, если файл/каталог пуст.
Скоро придёт
Осень
Re: В директории удалить все файлы кроме заданных
Сообщение t.t » 06.09.2013 22:23
И чего здесь плохого? При выводе в пайп ls выдаст тот же результат, что и find. Разве что при именах с пробелами потребуется дополнительная обработка.
Да и лишнего написали много. Я думал, любителям sed свойственна чрезмерная лаконичность, а не наоборот. 🙂
Re: В директории удалить все файлы кроме заданных
Сообщение SLEDopit » 06.09.2013 22:28
Re: В директории удалить все файлы кроме заданных
Сообщение drBatty » 06.09.2013 22:51
а я думал, что даже фанатеги микроскопа всё равно не станут рекомендовать забивать своим тотемом гвозди. (:
На самом деле — я пробовал. Способ с ls|sed|rm тупо не нужен, ибо тупо неудобен. ИМХО.
каталог ./d1/d2/d3/d4/ тоже «в текущей директории». Разве не так?
ещё PS: для задания глубины find умеет -maxdepth и -mindepth, а ls не умеет (только -R умеет)
Скоро придёт
Осень
Re: В директории удалить все файлы кроме заданных
Сообщение t.t » 06.09.2013 23:56
Строго говоря, нет. Он в директории d1/d2/d3/
Конкретно насчет find-а согласен. Да и то только при обработке самим find-ом либо -print0 | xargs -0
А насчёт for, видимо, осталась привычка со старых версий bash, где конструкция «for f in *» и пробелы-то нормально не обрабатывала — в этом смысле надо переучиваться. (:
Re: В директории удалить все файлы кроме заданных
Сообщение drBatty » 07.09.2013 06:31
Скоро придёт
Осень
Re: В директории удалить все файлы кроме заданных
Сообщение t.t » 07.09.2013 13:44
Вы знаете людей, которые всерьез называют каталоги файлами? Я таких не встречал.
Re: В директории удалить все файлы кроме заданных
Сообщение QWERTYASDF » 07.09.2013 23:12
Я извиняюсь конечно, может чего не поняла, но зачем так сложно? Ведь оболочка распознает шаблоны.
Re: В директории удалить все файлы кроме заданных
Сообщение t.t » 07.09.2013 23:53
Re: В директории удалить все файлы кроме заданных
Сообщение Rootlexx » 08.09.2013 00:07
Re: В директории удалить все файлы кроме заданных
Сообщение drBatty » 09.09.2013 05:28
а я такого каждый день наблюдаю. В зеркале.
Да и вообще считаю, что называть каталоги файлами — это такое Дао, которое просто необходимо пройти, если не хочешь всю жизнь прозябать в криво поставленном кем-то маздае.
Как всегда, ВСЁ выше(и ниже) изложенное == МХО.
а по моему опыту сложная команда find работает быстрее, и изменять её удобнее. Даже в том случае, если её результат — список файлов, который потом как-то иначе обрабатывается.
И да, субшеллы внутрь find я-бы не рекомендовал пихать. Их можно и снаружи организовать ввиде конвейера.
В итоге, по моему опыту, если нужно выполнить сложную задачу из серии «взять файлы по сложному условию и выполнить сложное действие над ними» лучше выполнять таким кодом:
А ваш конвейер == write-only макароны, который можно написать один раз, и больше НИКОГДА не трогать. Ибо проще с нуля переписать, чем исправить.
как удалить файлы, кроме некоторых?
Как, используя 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». Быстро, качественно, надёжно. Гарантия полгода.
Как удалить все файлы в каталоге, кроме некоторых?
Мне нужно удалить все файлы в каталоге, но исключить некоторые из них. Например, в каталоге с файлами a b c . z мне нужно удалить все, кроме u и p . Есть ли простой способ сделать это?
17 ответов
Что я делаю в таких случаях, это ввести
Затем я нажимаю Ctrl + X , * на развернуть * в все видимые имена файлов.
Затем я могу просто удалить два файла, которые мне нравится убирать из списка, и, наконец, выполнить командную строку.
В rm все, кроме u,p в bash просто введите:
Для этого необходимо установить следующий параметр:
Вы можете использовать find
- ! отменяет следующее выражение
- -name указывает имя файла
- -maxdepth 1 сделает процесс поиска только указанным каталогом ( find по умолчанию перемещает каталоги)
- -type f обрабатывает только файлы (а не, например, каталоги)
- -delete удалит файлы
Затем вы можете настроить условия поиска справочной страницы find
Обновление
- Имейте в виду, что порядок элементов выражений значителен (см. документацию)
Сначала проверьте свою команду, используя -print вместо -delete
mv файлы, которые вы хотите в верхнем каталоге, rm каталог, а затем mv их обратно.
Совсем похоже на этот ответ , но никаких специальных параметров не требуется, насколько мне известно, следующее: «древний» функциональность, поддерживаемая любой (неопределенно) /bin /sh похожей на оболочку (например, bash, zsh, ksh и т. д.)
Выполнение этого без поиска:
(Edit: «u» и «v», как и в других местах здесь, используются как общие версии целых регулярных выражений. Очевидно, вам нужно быть осторожным, чтобы привязывать ваши регулярные выражения, чтобы избежать совпадения слишком многих вещей.)
Вам определенно захочется сценарий, если вы собираетесь делать большую часть этого, как предложили другие.
GLOBIGNORE принимает список разделенных двоеточиями