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*
інакше оболонка розширить його.