команды трубопроводов после трубопровода xargs

HP-UX ***** B.11.23 U ia64 **** Лицензия на неограниченное количество пользователей

find . -type d -name *log*|xargs ls -la 

дает мне имя каталога (те, которые содержат журнал в имени каталога), а затем все файлы в этом каталоге.

Каталоги /var/opt/SID/application_a/log/ , /var/opt/SID/application_b/log/ , /var/opt/SID/application_c/log/ и т. Д. Содержат файлы журналов.

Я хочу, чтобы только две последние лог-файлы были перечислены командой ls, которую я обычно нахожу, используя ls -latr|tail -2 .

Результат должен быть примерно таким.

 /var/opt/SID/application_a/log/ -rw-rw-rw- 1 user1 user1 59698 Jun 11 2013 log1 -rw-rw-rw- 1 user1 user1 59698 Jun 10 2013 log2 /var/opt/SID/application_b/log/ -rw-rw-rw- 1 user1 user1 59698 Jun 11 2013 log1 -rw-rw-rw- 1 user1 user1 59698 Jun 10 2013 log2 /var/opt/SID/application_c/log/ -rw-rw-rw- 1 user1 user1 59698 Jun 11 2013 log1 -rw-rw-rw- 1 user1 user1 59698 Jun 10 2013 log2 

find . -type d -name *log*|xargs ls -la|tail -2 find . -type d -name *log*|xargs ls -la|tail -2 не дает мне вышеуказанного результата. Я получаю список последних двух файлов find . -type d -name *log*|xargs ls -la find . -type d -name *log*|xargs ls -la command.

Могу ли я передавать команды после конвейерных xargs? Как еще я запрашиваю, чтобы получить результирующий список файлов в вышеуказанном формате?

 find . -type d -name *log*|xargs sh -c "ls -ltr|tail -10" 

дает мне список из десяти имен каталогов внутри текущего каталога, который является / var / opt / SID, и это тоже не то, что я хочу.

  • xargs, записи и стандартный ввод
  • Найти файлы рекурсивно, которые старше одного года и не принадлежат конкретному пользователю
  • xargs не работает в Linux, поскольку работает в Unix
  • Использовать вход xargs в команде eval
  • Использование xargs с git
  • Как я могу рекурсивно заменить строку в именах файлов и каталогов?
  • Есть ли способ сделать этот однострочный лайнер быстрее?
  • Как удалить файлы, отфильтрованные awk
  • 2 Solutions collect form web for “команды трубопроводов после трубопровода xargs”

    Вы почти там. В вашей последней команде вы можете использовать -I для правильной работы ls

      -I replace-str Replace occurrences of replace-str in the initial-arguments with names read from standard input. Also, unquoted blanks do not terminate input items; instead the separator is the newline character. Implies -x and -L 1. 

    Итак, с

      find . -type d -name "*log*" | xargs -I {} sh -c "echo {};ls -la {} | tail -2" 

    вы будете echo от найденного find, затем сделайте « ls |tail » на нем

    GNU Parallel упрощает такие задачи:

     find . -type d -name "*log*" | parallel --tag "ls -la {} | tail -2" 

    Если вы не хотите выполнять полную установку GNU Parallel, вы можете выполнить минимальную установку: http://git.savannah.gnu.org/cgit/parallel.git/tree/README

    Linux и Unix - лучшая ОС в мире.