これxargs マニュアル説明する:
-I置換-str
--replace[=replace-str]
-i[replace-str]
初期引数の置換-strエントリを標準入力から読み取った名前に置き換えます。
この部分は理解できません。with names read from standard input.
たとえば、次のようになります。
find . -mindepth 1 -maxdepth 1 -print0 | xargs -0I{} echo | wc -l
上記のコードは、ディレクトリ内のファイル/ディレクトリの総数を計算します。
誰かが私にこれを説明できますか?
ベストアンサー1
「標準入力から読み取った名前を使用する」とは、xargs
標準入力から渡されたデータを取得して分割し、それを使用して引数で指定されたコマンドを実行することを意味します。デフォルトでは空白や改行に分割され、echo
一度にできるだけ多くの引数で実行されます。
-0
例のオプションは、xargs
入力を空白や改行ではなく null バイトに分割するように指示します。スペースや改行文字を含むファイル名を正しく処理するためにfind
sで使用されます。-print0
この-I
オプションは、新しいコマンドラインの作成方法を変更します。一度に必要なだけパラメータを追加する代わりに、入力から名前をxargs
一度に1つずつ取得し、指定されたトークン({}
ここ)を見つけてその名前に変更します。
あなたの例で{}
は与えられたコマンドテンプレートには存在しないので、xargs
実際には与えられた各ファイル名に対して引数なしで一度実行するようにxargs
指示されます。このコンテンツを表示するには、以下を削除してください。echo
find
wc
find . -mindepth 1 -maxdepth 1 -print0 | xargs -0I{} echo
一連の空白行が表示されます。これを以下と組み合わせます。
find . -mindepth 1 -maxdepth 1 -print0 | xargs -0I{} echo {}
そして
find . -mindepth 1 -maxdepth 1 -print0 | xargs -0 echo
そして
find . -mindepth 1 -maxdepth 1 -print0 | xargs -0
より良い理解を得るために。