【xargs】Linuxコマンド_引数を標準入力から与えて実行

「xargs」コマンドは、標準入力やファイルからリストを読み込んだ際に、その結果を別のコマンドラインで実行するコマンドとなります。

コマンドの出力を「|」パイプでxargsコマンドを実行し、別のコマンドの引数として指定する使い方ができます。
以下の例では、「ls」コマンドで出力したテキストファイルを「xargs」コマンドを使用し、削除した例となります。

$ ls *.txt
test01.txt  test02.txt
$ 
$ ls *.txt | xargs rm
$ ls *.txt
$




↓↓↓ITエンジニアのおすすめ学習・開発環境の詳細へ↓↓↓

「xargs」コマンドの使い方(Linux)

「xargs」コマンドを使用し、実行してみます。
コマンドに与えられる引数の最大の数を制限したり、引数の数が多すぎる場合に自動的に分割して実行することも可能です。

以下では「kyushu」というファイルに記載されている文字列を出力しています。

$ cat kyushu
fukuoka
saga
nagasaki
kumamoto
oita
miyazaki
kagoshima

こちらのファイルをベースに引数を与えて出力結果を表示していきます。

記述されている文字列を繋げて出力

以下では「xargs」を利用し、ファイルに記載された文字列を繋げて出力しています。

$ cat kyushu | xargs echo
fukuoka saga nagasaki kumamoto oita miyazaki kagoshima

文字列が多くなればかなり長くなるので、実際の端末の画面では折り返されますが、実際には一列に繋がって出力されます。

自動的に分割して表示

文字数が多くなると見にくいので、自動的に分割して表示するようにします。
以下では文字列を「3」文字で分割し表示した例となります。

「-n」オプションで引数オプションを利用して実行します。

$ cat kyushu | xargs -n 3 echo
fukuoka saga nagasaki
kumamoto oita miyazaki
kagoshima

「空白」が含まれる文字列の出力

次に以下のように、県名と市町村を合わせた文字を表示させます。
県名と市町村名の間には「空白(スペース)」を入れて一つの文字列として表示します。

$ cat kyushu 
fukuoka fukuokashi
saga sagashi
oita oitashi
nagasaki nagasakishi
kumamoto kumamotoshi
miyazaki miyazakishi
kagoshima kagoshimashi

上記の文字列を「3」つに分割して表示します。
以下では「-n」オプションで引数の数を3つに制限します。

$ cat kyushu | xargs -n 3 echo
fukuoka fukuokashi saga
sagashi oita oitashi
nagasaki nagasakishi kumamoto
kumamotoshi miyazaki miyazakishi
kagoshima kagoshimashi

上記のように3つに分割はされますが、「saga」と「sagashi」が一つの文字列ではなく2つに分割されています。

これは、「xargs」コマンドがスペースやタブなどの空白文字と改行文字を引数の区切りとして認識しているため、空白で区切られてしまいます。

改行のみを区切り文字に指定する

文字列を正しく表示するために、「-d」オプションで改行のみを区切り文字に指定します。

改行は「\n」で表現します。
以下ではシングルクォーテーション「’」で「\n」を囲みます。

改行「\n」を一つの文字としてシングルクォーテーションで囲むことで、「\」バックスラッシュをシェルに読み込ませないようにします。

$ cat kyushu | xargs -n 3 -d '\n' echo
fukuoka fukuokashi saga sagashi oita oitashi
nagasaki nagasakishi kumamoto kumamotoshi miyazaki miyazakishi
kagoshima kagoshimashi

もう一つの表示方法は、「\」を「\n」の手前に書く方法となります。
こちらも上記のシングルクォーテーションと同じ働きをします。

$ cat kyushu | xargs -n 3 -d \\n echo
fukuoka fukuokashi saga sagashi oita oitashi
nagasaki nagasakishi kumamoto kumamotoshi miyazaki miyazakishi
kagoshima kagoshimashi

行数を指定して出力する

ファイルのデータの行数を指定して表示するには「-L」オプションが有効です。
以下ではデータの3行づつを出力した結果となります。

$ cat kyushu | xargs -L 3 echo
fukuoka fukuokashi saga sagashi oita oitashi
nagasaki nagasakishi kumamoto kumamotoshi miyazaki miyazakishi
kagoshima kagoshimashi

「xargs」コマンドオプション

「xargs」コマンドのオプションは以下の通りとなります。

$ xargs --help
使用法: xargs [OPTION]... COMMAND [INITIAL-ARGS]...
Run COMMAND with arguments INITIAL-ARGS and more arguments read from input.

Mandatory and optional arguments to long options are also
mandatory or optional for the corresponding short option.
  -0, --null                   items are separated by a null, not whitespace;
                                 disables quote and backslash processing and
                                 logical EOF processing
  -a, --arg-file=FILE          read arguments from FILE, not standard input
  -d, --delimiter=CHARACTER    items in input stream are separated by CHARACTER,
                                 not by whitespace; disables quote and backslash
                                 processing and logical EOF processing
  -E END                       set logical EOF string; if END occurs as a line
                                 of input, the rest of the input is ignored
                                 (ignored if -0 or -d was specified)
  -e, --eof[=END]              equivalent to -E END if END is specified;
                                 otherwise, there is no end-of-file string
  -I R                         same as --replace=R
  -i, --replace[=R]            replace R in INITIAL-ARGS with names read
                                 from standard input; if R is unspecified,
                                 assume {}
  -L, --max-lines=MAX-LINES    use at most MAX-LINES non-blank input lines per
                                 command line
  -l[MAX-LINES]                similar to -L but defaults to at most one non-
                                 blank input line if MAX-LINES is not specified
  -n, --max-args=MAX-ARGS      use at most MAX-ARGS arguments per command line
  -P, --max-procs=MAX-PROCS    run at most MAX-PROCS processes at a time
  -p, --interactive            prompt before running commands
      --process-slot-var=VAR   set environment variable VAR in child processes
  -r, --no-run-if-empty        if there are no arguments, then do not run COMMAND;
                                 if this option is not given, COMMAND will be
                                 run at least once
  -s, --max-chars=MAX-CHARS    limit length of command line to MAX-CHARS
      --show-limits            show limits on command-line length
  -t, --verbose                print commands before executing them
  -x, --exit                   exit if the size (see -s) is exceeded
      --help                   display this help and exit
      --version                output version information and exit

バグを発見した場合は <bug-findutils@gnu.org> まで報告してください。

「xargs」コマンドの使い方は以上となります。

エンジニアのオンライン学習

エンジニアにおすすめのオンライン教材比較
ITエンジニアが自宅で学習ができるオンラインスクール比較

エンジニアのおすすめ学習「Progate」と「Udemy」比較

VPS_比較
最新情報をチェックしよう!