LoginSignup
5
7

More than 1 year has passed since last update.

初学者のためのxargs

Last updated at Posted at 2022-11-29

はじめに

シェルを利用した作業において一番最初に初学者が効率化を実感できるものがxargsの活用だと思い、本記事を書きました。
まずは使ってみよう、ということで比較的使いやすく便利なオプションをピックアップしました。
最後にtipsとしてヒアドキュメントとの併用を紹介していますが、あまり見かけないので初学者ではない方にも有用かもしれません

xargsとは

xargsとは標準入力やファイルからリストを読み込んでコマンドライン実行してくれるコマンドです
xargsの有無の違いはcatの処理が分かりやすいですね

❯ ls
foo	hoge

❯ cat hoge
fuga

❯ cat foo
bar

❯ ls | cat
foo
hoge

❯ ls | xargs cat
bar
fuga

文字列として渡すのか、パラメータの引数として渡すのかが違う

-Iオプションで位置を自由に

-Iオプションを使用することで直後に指定した文字列を変数のように見立てて引数の位置を自由に変更しコマンドを実行できます。
ちょっとした文字列の加工にも使ったりします。

❯ echo hoge |xargs -I {} mkdir -p {}1/{}2/{}3

❯ ls -R hoge1
hoge2

hoge1/hoge2:
hoge3

hoge1/hoge2/hoge3:

複数のコマンドへ渡したいときは

bashの-cオプションを使い文字列として引数を渡してあげることで複数のコマンド処理も可能です。
下記コマンドはカレントディレクトリにあるファイルを圧縮しつつ、圧縮後の中身をチェックしています。

❯ ls
a.txt	b.txt	c.txt

❯ cat a.txt
a

❯ ls |xargs -I {} bash -c 'gzip {} && zcat {}.gz'
a
b
c

❯ ls
a.txt.gz	b.txt.gz	c.txt.gz

よくあるやり方

よくあるやり方としてファイルに引数として渡したい対象を記載し、catでxargsに渡すというものがあります。
下記はドメイン一覧が書かれているdomain.lstをxargsに渡し、ドメイン名とそのIPを出力させています。

❯ cat domain.lst
qiita.com
esu2.co.jp
google.com

❯ cat domain.lst|xargs -I {} bash -c 'echo && echo {} && dig {} +shor'

qiita.com
52.68.203.46
54.150.97.130
3.113.225.145

esu2.co.jp
54.150.23.130

google.com
216.58.220.110

視認性のためにechoで何も引数を指定せず改行させています。

ヒアドキュメントの併用がおすすめ

リスト一覧のファイルを何度も使用する場合には上述のようにcatでファイルの中身を渡してあげてもいいのですが、一度きりの作業に一々ファイルを作ってしまうと消し忘れもありますし、何より手間です。
できるだけメモリで処理したい!と自分は思うので下記のようにヒアドキュメント併用させたものをスニペットに登録して使っています。
あとはリスト一覧をヒアドキュメントの位置に貼り付けて実行したいコマンドを追記するだけでok

cat << eof | xargs -I {}

eof
❯ cat << eof | xargs -I {} bash -c 'echo && echo {} && dig {} +shor'
google.com
qiita.com
esu2.co.jp
eof

google.com
172.217.26.238

qiita.com
52.68.203.46
54.150.97.130
3.113.225.145

esu2.co.jp
54.150.23.130

単純作業の効率化におすすめです。

5
7
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7