便利な xargsコマンド

便利な xargsコマンド

ファイルを ls で調べ
その結果見つけたものの中身を grep で検索
これでもできるけど
できれば一度にすませたい

でも

sudo ls /etc/ssh/*config |grep -H key 

としても結果はでてこない

理由はls コマンドの結果は
標準出力、つまり画面に表示なので
パイプで流した文字列を引数にする必要がある

なので まずは while 文で調べるようにする

 ls /etc/ssh/*config | while read f; do sudo grep -H key $f; done

最初の

ls /etc/ssh/*config | while read f

で ls コマンドの結果を、変数f に格納

スクリプトの場合、$変数名でアクセスできるので

do sudo grep -H key $f; done


でその結果のファイルパスを引数にして
grep コマンドで検索している

これよりもっと楽な方法として
xargs をつかう

これは、ほとんどの場合
パイプで渡された結果を受け取って
それを引数として、指定したコマンドで実行する
という使い方をする

例えば、今回の場合なら
ls コマンドででたファイルパスを
grep コマンドの引数にしたいので

 ls /etc/ssh/*config | xargs sudo grep key

とすれば


/etc/ssh/sshd_config:#HostKey /etc/ssh/ssh_host_key
/etc/ssh/sshd_config:#HostKey /etc/ssh/ssh_host_rsa_key
/etc/ssh/sshd_config:#HostKey /etc/ssh/ssh_host_dsa_key
/etc/ssh/sshd_config:# Lifetime and size of ephemeral version 1 server key
/etc/ssh/sshd_config:#PubkeyAuthentication yes
/etc/ssh/sshd_config:#AuthorizedKeysFile	.ssh/authorized_keys
/etc/ssh/sshd_config:# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
/etc/ssh/sshd_config:# Change to no to disable s/key passwords


と表示される

xargs コマンドは
ls や find で見つけた結果を処理するのに使える

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です