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
コマンドで最新の2つのログファイルのみを一覧表示したいので、通常はを使用して見つけます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
コマンドの最後の2つのファイルのリストです
。
パイプされた後にコマンドをパイプできますxargs
か?上記の形式のファイルの結果リストを取得するために、他にどのようにクエリを実行しますか?
find . -type d -name *log* | xargs sh -c "ls -ltr | tail -10"
現在のディレクトリ内にある10個のディレクトリ名のリストが表示されますが/var/opt/SID
、これは私が望んでいるものでもありません。
sh -c
2番目の引数としてコマンド名(パラメーター0)を想定しているため、常に行う必要があることにfind . -type d -name *log* | xargs sh -c "ls -ltr | tail -10" lstail
注意してください(lstail
最後に注意してください$0
。作成されたシェルの役割を果たします)。そうしないと、最初の結果がその役割を満たし、使用されなくなります。
*log*
そうしないと、シェルがそれを展開します。