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