「xargs」の場合、「-L1」と「-n 1」は同じですか?

「xargs」の場合、「-L1」と「-n 1」は同じですか?

~から安全にファイルの検索と削除

locate  -i nohup.out | xargs -d '\n' -L1 -p rm

Locate 出力の各行は xargs の引数として処理されるので と ?同じ-L1です。-n 1

答え1

マニュアルから:

-L max-linesコマンドライン
ごとの最大max-linesスペース以外の入力行を使用します。末尾の空白のため、入力行は論理的に次の入力行に続きます。 -x を意味します。

-n max-args
コマンドラインごとに最大 max-args 個の引数を使用します。サイズを超えると(-sオプションを参照)、-xオプションが指定されていない限り、max-argsよりも少ない引数が使用されます。この場合、xargsは終了します。

-d delim
エントリは指定された文字で終了します。 [...]

これと私の理解に基づいて、あなたの場合、渡された引数で区切り-L1文字を空白から(改行)に変更して-n1同等にします。1\n-d

たとえば、-d引数がない場合、位置出力にスペースが含まれている場合、行は2つの引数に分割されるため、rm withの2つの異なる用途が使用されますが、-n1まだ1つの引数と1つのコマンドとして扱われます。-L1

答え2

マニュアルを読んでみると、-Lフィルタに違いがあるようです。空白ではない行、-nいいえ。空白のみを含む行は出力されないと仮定するため、locateこのユースケースでは機能的に同じでなければなりません。

答え3

-nスペースに分割、-L改行に分割

したがって、異なる結果が生成されます。

printf '1 2\n3 4\n' | xargs -L1 echo

行ごとに分割するので、次のようになります。

echo 1 2
echo 3 4

出力:

1 2
3 4

しかし:

printf '1 2\n3 4\n' | xargs -n1 echo

スペースに分割されるので、次のようになります。

echo 1
echo 2
echo 3
echo 4

そして以下を作ります:

1
2
3
4

関連:https://stackoverflow.com/questions/6527004/why-does-xargs-l-yield-the-right-format-while-xargs-n-doesnt

答え4

オプション-LはXSI拡張であるため、組み込みシステムに存在する必要はありません。

-n オプションは基本標準の一部であり、常に有効です。

参照規格を参照してください。http://pubs.opengroup.org/onlinepubs/9699919799/utilities/xargs.html

一部の実装では、空白で終わる行の動作を切り替えることもできますが、他の実装では -L オプションを指定するかどうかにかかわらず、空白で終わる行を連結することもできます。

関連情報