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

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

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

50 ответов

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

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

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

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

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

Это почти то же самое, что и ответ Рафаэля Б., но тот, который также будет обрабатывать максимальную длину аргумента. Мы делаем это, просто говоря 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
ответ дан 4 August 2018 в 20:09

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

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

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

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

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

, затем a.. [

then 'log' или 'txt'

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

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

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

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

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

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

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

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

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

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

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

, затем a.. [

then 'log' или 'txt'

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

Это почти то же самое, что и ответ Рафаэля Б., но тот, который также будет обрабатывать максимальную длину аргумента. Мы делаем это, просто говоря 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
ответ дан 6 August 2018 в 04:11

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

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

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

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

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

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

  find -iname '* .txt';  find -iname '* .log'  
1
ответ дан 7 August 2018 в 22: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
ответ дан 7 August 2018 в 22:10
  find.  -regextype posix-extended -iregex '. * \. (log | txt)' -print0 |  xargs -0 tar zcf $ file  

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

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

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

, затем a.. [

then 'log' или 'txt'

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

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

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

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

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

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

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

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

Это почти то же самое, что и ответ Рафаэля Б., но тот, который также будет обрабатывать максимальную длину аргумента. Мы делаем это, просто говоря 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
ответ дан 10 August 2018 в 10:24
  find.  -regextype posix-extended -iregex '. * \. (log | txt)' -print0 |  xargs -0 tar zcf $ file  

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

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

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

, затем a.. [

then 'log' или 'txt'

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

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

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

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

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

2
ответ дан 13 August 2018 в 16:49

Это почти то же самое, что и ответ Рафаэля Б., но тот, который также будет обрабатывать максимальную длину аргумента. Мы делаем это, просто говоря 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
ответ дан 13 August 2018 в 16:49
  • 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
ответ дан 13 August 2018 в 16:49
  find.  -regextype posix-extended -iregex '. * \. (log | txt)' -print0 |  xargs -0 tar zcf $ file  

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

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

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

, затем a.. [

then 'log' или 'txt'

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

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

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