Как собрать все в “txt” и “лог” файлами, используя найти?

Это может быть полезно (в зависимости от типа оборудования):

dmesg
lspci
lsusb
5
задан 5 January 2011 в 01:23

50 ответов

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

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

2
ответ дан 25 May 2018 в 23:39
  • 1
    По какой-то причине, когда я пытаюсь это найти, только найти .txt, если я удалю -prin0 | ...., я получаю все перечисленные файлы, хотя – OscarRyz 5 January 2011 в 01:57
  • 2
    Ты прав. Добавьте скобки перед -print0. – Raphael Bossek 5 January 2011 в 02:03
  • 3
    Это будет работать до определенного момента. Если файлы, найденные с помощью find, должны превышать максимальную длину аргумента, xargs будет передавать как можно больше файлов в tar, а затем снова запустить их с остальными файлами. Это означает, что второй tar будет перезаписывать архив первым tar. – geirha 20 January 2011 в 23:44
  • 4
    бесполезное использование xargs – user unknown 20 March 2011 в 04:46

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

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

2
ответ дан 25 July 2018 в 22:39

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

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

2
ответ дан 26 July 2018 в 23:28

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

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

2
ответ дан 31 July 2018 в 12:29

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

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

2
ответ дан 2 August 2018 в 04:05

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

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

2
ответ дан 4 August 2018 в 20:09

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

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

2
ответ дан 6 August 2018 в 04:11

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

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

2
ответ дан 7 August 2018 в 22:10

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

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

2
ответ дан 10 August 2018 в 10:24

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

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

2
ответ дан 13 August 2018 в 16:49
  • 1
    По какой-то причине, когда я пытаюсь это найти, только найдите .txt, если я удалю -prin0 | .... Я получаю все перечисленные файлы – OscarRyz 5 January 2011 в 01:57
  • 2
    Ты прав. Добавьте скобки перед -print0. – Raphael Bossek 5 January 2011 в 02:03
  • 3
    Это будет работать до определенного момента. Если файлы, найденные с помощью find, должны превышать максимальную длину аргумента, xargs будет передавать как можно больше файлов в tar, а затем снова запустить их с остальными файлами. Это означает, что второй tar будет перезаписывать архив первым tar. – geirha 20 January 2011 в 23:44
  • 4
    бесполезное использование xargs – user unknown 20 March 2011 в 04:46

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

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

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

4
ответ дан 25 May 2018 в 23:39
  • 1
    Хорошо знать. Кстати, у меня такая ситуация, когда путь слишком длинный, и он не включен в поиск. Чтобы решить это, я просто подключился к более близкому пути. Считаете ли вы, что это тоже поможет в этой ситуации? Например, у меня есть /some/path/other/other/other/file1.txt и /some/path/other/other/other/file2.txt и так далее. Таким образом, команда удалила несколько файлов. Чтобы обойти это, я сначала cd /some/path/other/other и выполняю поиск оттуда. – OscarRyz 21 January 2011 в 01:44
  • 2
    Гектометр Древний формат tar имел ограничение длины пути, но по крайней мере формат posix tar (pax) не имеет ограничений. Не знаете, какой формат GNU tar использует по умолчанию. Как долго путь, который дает вам проблемы? Не могли бы вы проверить с помощью printf %s /some/path/other/other/other/file1.txt | wc -c? Также вы видите, какая программа выдает сообщение об ошибке? найти, xargs или tar? – geirha 21 January 2011 в 12:14
  • 3
    Да, молодцы. Спасибо ... Я тестировал его с большим количеством имен файлов, а использование xargs - это, конечно, ловушка ... Он неумолимо запускает tar снова и перезаписывает предыдущий .tar, который, конечно, имеет одно и то же имя ... Какой простой способ потеряйте много данных и не получите предупреждения! .. кроме твоих :) – Peter.O 21 January 2011 в 16:11

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

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

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

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

2
ответ дан 25 May 2018 в 23:39

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

find -iname '*.txt'; find -iname '*.log'
1
ответ дан 25 May 2018 в 23:39
find . -regextype posix-extended -iregex '.*\.(log|txt)' -print0 | xargs -0 tar zcf $file

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

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

Любое число любого символа, затем a. затем «log» или «txt»
1
ответ дан 25 May 2018 в 23:39
  • 1
    Я получил: find: invalid predicate -regextype, но это привело меня к рабочей версии find . -regex '.*\.\(log\|txt\)' -print0 ...etc – OscarRyz 5 January 2011 в 01:59
  • 2
    Это странно. Он отлично работает для меня, но не соответствует, если я не укажу тип регулярного выражения как posix-extended, awk, gnu-awk или posix-egrep с помощью параметра -regextype. – dv3500ea 5 January 2011 в 02:10
find . -regextype posix-extended -iregex '.*\.(log|txt)' -print0 | xargs -0 tar zcf $file

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

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

Любое число любого символа, затем a. затем «log» или «txt»
1
ответ дан 25 July 2018 в 22:39
  • 1
    У меня получилось: find: invalid predicate -regextype, но это привело меня в рабочей версии find . -regex '.*\.\(log\|txt\)' -print0 ...etc – OscarRyz 5 January 2011 в 01:59
  • 2
    Это странно. Он отлично работает для меня, но не совпадает, если я не указать Тип выражения, как posix-extended, awk, gnu-awk или [F4] и с помощью -regextype параметр . – dv3500ea 5 January 2011 в 02:10

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

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

отметим, что это ГНУ конкретными. смолы на других Unix или Unix-подобными системами не понимает --null, но дегтя в Ubuntu-это дистрибутив GNU смолы, поэтому он будет работать там нормально.

4
ответ дан 25 July 2018 в 22:39
  • 1
    Хорошо знать. Кстати, у меня такая ситуация, когда путь слишком длинный, и он не включен в поиск. Чтобы решить это, я просто подключился к более близкому пути. Считаете ли вы, что это тоже поможет в этой ситуации? Например, у меня есть /some/path/other/other/other/file1.txt и /some/path/other/other/other/file2.txt и так далее. Таким образом, команда удалила несколько файлов. Чтобы обойти это, я сначала cd /some/path/other/other и выполняю поиск оттуда. – OscarRyz 21 January 2011 в 01:44
  • 2
    Гектометр Древний формат tar имел ограничение длины пути, но по крайней мере формат posix tar (pax) не имеет ограничений. Не знаете, какой формат GNU tar использует по умолчанию. Как долго путь, который дает вам проблемы? Не могли бы вы проверить с помощью printf %s /some/path/other/other/other/file1.txt | wc -c? Также вы видите, какая программа выдает сообщение об ошибке? найти, xargs или tar? – geirha 21 January 2011 в 12:14
  • 3
    Да, молодцы geirha. Спасибо... я тестировал его с большим количеством файлов, и использование команды xargs-это, конечно, ловушка... оно неумолимо бежит смола снова и перезаписывает предыдущую .Тар, которая, конечно, имеет такое же название... что легкий способ сбросить много данных и сделать без предупреждения! .. кроме тебя :) – Peter.O 21 January 2011 в 16:11

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

find -iname '*.txt'; find -iname '*.log'
1
ответ дан 25 July 2018 в 22:39

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

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

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

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

2
ответ дан 25 July 2018 в 22:39
find . -regextype posix-extended -iregex '.*\.(log|txt)' -print0 | xargs -0 tar zcf $file

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

на примере игр:

любое количество любых символов, то '.' тогда 'журнала' или 'ТХТ'
1
ответ дан 26 July 2018 в 23:28
  • 1
    У меня получилось: find: invalid predicate -regextype, но это привело меня в рабочей версии find . -regex '.*\.\(log\|txt\)' -print0 ...etc – OscarRyz 5 January 2011 в 01:59
  • 2
    Это странно. Он отлично работает для меня, но не соответствует, если я не укажу тип регулярного выражения как posix-extended, awk, gnu-awk или posix-egrep с помощью параметра -regextype. – dv3500ea 5 January 2011 в 02:10

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

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

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

4
ответ дан 26 July 2018 в 23:28
  • 1
    Хорошо знать. Кстати, у меня такая ситуация, когда путь слишком длинный, и он не включен в поиск. Чтобы решить это, я просто подключился к более близкому пути. Считаете ли вы, что это тоже поможет в этой ситуации? Например, у меня есть /some/path/other/other/other/file1.txt и /some/path/other/other/other/file2.txt и так далее. Таким образом, команда удалила несколько файлов. Чтобы обойти это, я сначала cd /some/path/other/other и выполняю поиск оттуда. – OscarRyz 21 January 2011 в 01:44
  • 2
    Тю. Древние формате TAR было ограничение на длину пути, но, по крайней мере, Формат TAR в posix (чел) не имеет ограничений. Не уверен, что Формат ГНУ деготь используется по умолчанию. Как долго это путь, который дает вам проблемы? Не могли бы вы проверить с printf %s /some/path/other/other/other/file1.txt | wc -c ? Также, вы видите, какая программа дает сообщение об ошибке? найти, xargs и смолы? – geirha 21 January 2011 в 12:14
  • 3
    Да, молодцы. Спасибо ... Я тестировал его с большим количеством имен файлов, а использование xargs - это, конечно, ловушка ... Он неумолимо запускает tar снова и перезаписывает предыдущий .tar, который, конечно, имеет одно и то же имя ... Какой простой способ потеряйте много данных и не получите предупреждения! .. кроме твоих :) – Peter.O 21 January 2011 в 16:11

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

find -iname '*.txt'; find -iname '*.log'
1
ответ дан 26 July 2018 в 23:28

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

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

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

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

2
ответ дан 26 July 2018 в 23:28
find . -regextype posix-extended -iregex '.*\.(log|txt)' -print0 | xargs -0 tar zcf $file

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

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

Любое число любого символа, затем a. затем «log» или «txt»
1
ответ дан 31 July 2018 в 12:29
  • 1
    Я получил: find: invalid predicate -regextype, но это привело меня к рабочей версии find . -regex '.*\.\(log\|txt\)' -print0 ...etc – OscarRyz 5 January 2011 в 01:59
  • 2
    Это странно. Он отлично работает для меня, но не соответствует, если я не укажу тип регулярного выражения как posix-extended, awk, gnu-awk или posix-egrep с помощью параметра -regextype. – dv3500ea 5 January 2011 в 02:10

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

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

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

4
ответ дан 31 July 2018 в 12:29
  • 1
    Хороший, чтобы знать. Кстати, у меня такая ситуация, когда путь слишком длинный и не входит в поиск. Чтобы решить его, я просто компакт-диска на ближе путь. Как вы думаете, это тоже поможет в этой ситуации? Например, у меня есть /some/path/other/other/other/file1.txt и /some/path/other/other/other/file2.txt и так далее. Таким образом, команда завершила ряд файлов. Чтобы избежать этого, я впервые cd /some/path/other/other и выполните поиск оттуда. – OscarRyz 21 January 2011 в 01:44
  • 2
    Тю. Древние формате TAR было ограничение на длину пути, но, по крайней мере, Формат TAR в posix (чел) не имеет ограничений. Не уверен, что Формат ГНУ деготь используется по умолчанию. Как долго это путь, который дает вам проблемы? Не могли бы вы проверить с printf %s /some/path/other/other/other/file1.txt | wc -c ? Также, вы видите, какая программа дает сообщение об ошибке? найти, xargs и смолы? – geirha 21 January 2011 в 12:14
  • 3
    Да, молодцы geirha. Спасибо... я тестировал его с большим количеством файлов, и использование команды xargs-это, конечно, ловушка... оно неумолимо бежит смола снова и перезаписывает предыдущую .Тар, которая, конечно, имеет такое же название... что легкий способ сбросить много данных и сделать без предупреждения! .. кроме тебя :) – Peter.O 21 January 2011 в 16:11

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

find -iname '*.txt'; find -iname '*.log'
1
ответ дан 31 July 2018 в 12:29

вот ответ на бесполезное использование команды xargs:

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

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

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

2
ответ дан 31 July 2018 в 12:29
find . -regextype posix-extended -iregex '.*\.(log|txt)' -print0 | xargs -0 tar zcf $file

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

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

Любое число любого символа, затем a. затем «log» или «txt»
1
ответ дан 2 August 2018 в 04:05
  • 1
    Я получил: find: invalid predicate -regextype, но это привело меня к рабочей версии find . -regex '.*\.\(log\|txt\)' -print0 ...etc – OscarRyz 5 January 2011 в 01:59
  • 2
    Это странно. Он отлично работает для меня, но не соответствует, если я не укажу тип регулярного выражения как posix-extended, awk, gnu-awk или posix-egrep с помощью параметра -regextype. – dv3500ea 5 January 2011 в 02:10

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

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

отметим, что это ГНУ конкретными. смолы на других Unix или Unix-подобными системами не понимает --null, но дегтя в Ubuntu-это дистрибутив GNU смолы, поэтому он будет работать там нормально.

4
ответ дан 2 August 2018 в 04:05
  • 1
    Хороший, чтобы знать. Кстати, у меня такая ситуация, когда путь слишком длинный и не входит в поиск. Чтобы решить его, я просто компакт-диска на ближе путь. Как вы думаете, это тоже поможет в этой ситуации? Например, у меня есть /some/path/other/other/other/file1.txt и /some/path/other/other/other/file2.txt и так далее. Таким образом, команда завершила ряд файлов. Чтобы избежать этого, я впервые cd /some/path/other/other и выполните поиск оттуда. – OscarRyz 21 January 2011 в 01:44
  • 2
    Гектометр Древний формат tar имел ограничение длины пути, но по крайней мере формат posix tar (pax) не имеет ограничений. Не знаете, какой формат GNU tar использует по умолчанию. Как долго путь, который дает вам проблемы? Не могли бы вы проверить с помощью printf %s /some/path/other/other/other/file1.txt | wc -c? Также вы видите, какая программа выдает сообщение об ошибке? найти, xargs или tar? – geirha 21 January 2011 в 12:14
  • 3
    Да, молодцы. Спасибо ... Я тестировал его с большим количеством имен файлов, а использование xargs - это, конечно, ловушка ... Он неумолимо запускает tar снова и перезаписывает предыдущий .tar, который, конечно, имеет одно и то же имя ... Какой простой способ потеряйте много данных и не получите предупреждения! .. кроме твоих :) – Peter.O 21 January 2011 в 16:11

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

find -iname '*.txt'; find -iname '*.log'
1
ответ дан 2 August 2018 в 04:05

вот ответ на бесполезное использование команды xargs:

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

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

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

2
ответ дан 2 August 2018 в 04:05

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

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