HP-UX ***** B.11.23 U ia64 **** безлимитная лицензия
find . -type d -name *log* | xargs ls -la
дает мне имена каталогов (те, которые содержатся log
в имени каталога), за которыми следуют все файлы в этом каталоге.
Каталоги /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
командных файлов
.
Так я могу передать команды после передачи по каналу xargs
? Как еще я могу запросить, чтобы получить результирующий список файлов в вышеуказанном формате?
find . -type d -name *log* | xargs sh -c "ls -ltr | tail -10"
дает мне список из десяти имен каталогов внутри текущего каталога, который, как оказалось, /var/opt/SID
и это тоже не то, что я хочу.
sh -c
виду, что ожидает имя команды (параметр 0) в качестве второго аргумента, поэтому вы всегда должны это делать find . -type d -name *log* | xargs sh -c "ls -ltr | tail -10" lstail
(обратите внимание lstail
на конец, который будет служить $0
для созданной оболочки). В противном случае первый из ваших результатов заполнит эту роль и останется неиспользованным.
*log*
противном случае оболочка расширит его.