xargs 配管後パイプコマンド

xargs 配管後パイプコマンド

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/ログファイルが含まれています。

コマンドで2つの最新のログファイルを一覧表示したいと思います。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上記の結果は提供しません。私が得るのは、コマンドの最後の2つのファイルのリストです find . -type d -name *log* | xargs ls -la

それでは、パイピング後にコマンドをパイピングできますかxargs?上記の形式のファイル結果のリストを取得するにはどうすればよいですか?

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

現在のディレクトリにある10のディレクトリ名のリストを提供します。これはまさにですが/var/opt/SID、それも私が望むものではありません。

ベストアンサー1

ほぼすべて来ました。最後のコマンドでは、以下を使用して正しく-I実行できます。ls

-I replace-str

    発生の交換交換-str初期引数では、標準入力から名前を読み込みます。また、引用符のないスペースは項目を終了せず、代わりに区切り文字は改行文字です。意味-xします-L 1

だから、

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

echoで見つかったディレクトリを見つけてfindls | tailそのディレクトリで作業を実行します。

おすすめ記事