Как собрать все & ldquo; txt & rdquo; и & ldquo; log & rdquo; файлы с помощью поиска?

В настоящее время у меня есть этот скрипт:

find . -iname '*.log' -print0 | xargs -0 tar zcf $file

Для сбора всех файлов "* .log" из данного каталога. Я хотел бы изменить его, чтобы включить также все файлы ".txt", но я не знаю как, это должно быть довольно просто, верно?

5
задан 5 January 2011 в 00:23

5 ответов

Вы на правильном пути. Попробуйте это:

find . \( -iname "*.log" -or -iname "*.txt" \) -print0 | xargs -0 tar zcf $file

0
ответ дан 5 January 2011 в 00:23

Это почти совпадает с ответом Рафаэля Б., но он также обрабатывает превышение максимальной длины аргумента. Мы делаем это, просто приказывая tar прочитать имена файлов для архивирования из stdin (где нет ограничений) вместо того, чтобы ожидать их в качестве аргументов:

find . \( -iname "*.log" -o -iname "*.txt" \) -print0 | tar --null --files-from=- -zcf "$file"

Обратите внимание, что это специфично для GNU. tar в других системах UNIX или UNIX-подобных не понимает --null, но tar в Ubuntu - это GNU tar, поэтому там он будет работать нормально.

0
ответ дан 5 January 2011 в 00:23

Как насчет этого очень простого подхода:

find -iname '*.txt'; find -iname '*.log'
0
ответ дан 5 January 2011 в 00:23

Вот ответ на бесполезное использование xargs:

find \( -name "*.log" -or -name "*.txt" \) -exec tar zcf archiv2 {} + 

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

Псевдоаргумент, который вы должны помнить, чтобы поместить -delete в качестве последнего: Ну, да, вы тоже должны помнить, чтобы поставить | xargs ... как последний, не так ли?

0
ответ дан 5 January 2011 в 00:23
find . -regextype posix-extended -iregex '.*\.(log|txt)' -print0 | xargs -0 tar zcf $file

Вы можете заменить '.*\.(log|txt)' любым регулярным выражением POSIX Extended .

Пример соответствует:

Любое число любого символа

, затем «.»

, затем «log» или «txt»

< / BLOCKQUOTE>
0
ответ дан 5 January 2011 в 00:23

Другие вопросы по тегам:

Похожие вопросы: