wc解釈基準をファイルリストにする方法

wc解釈基準をファイルリストにする方法

wcこの問題を解決する別の方法があることを知っていますが、stdinをファイル名またはファイル名のリストとして解釈できるようにしたいです。例えば、

ls JP*/std* | wc

同じ効果があるでしょう

wc JP*/std*

この動作を調整することは不可能ですが、私の人生をより簡単にするスクリプトを書いています。ありがとうございます。

答え1

findと一緒に使用されますxargs。私がこれをお勧めする唯一の理由は、ファイル名をNULで区切るオプションfindを利用することです-print0。これは、スペースを含むファイル名に関する問題を回避するのに役立ちます。

find .  -maxdepth 1 -type f -print0 | xargs -0 wc

答え2

コマンドの出力を取得して入力ファイルのリストとして使用するには、wc次のようにします。

wc $(ls JP*/std*)

実行されls JP*/std*、出力がに引数として渡されますwc

xargs以下はあなたにも役立ちます。

ls JP*/std* | xargs wc

よりxargsマンページ非常に柔軟なので、使用方法の詳細を確認してください。

答え3

あなたのコメントを読んだ後

入力はファイルから来ることができます。

ファイルリストがすでにファイルに存在する場合は、検索部分をスキップしてそのxargs部分のみを使用できます。

xargsマニュアルページを参照してください。

-a読みたいリストがある場所にオプションを使用して、ファイルのファイル名を渡しますxargsxargs

リスト内のファイル名がフルファイル名ではなく、ファイルをwc編集するためのディレクトリがないため、渡すだけで十分でない場合は、フルパスを含めます(手動で編集せずにこれを実行できる必要があります)。sedまたはawk同様)。

xargs-Iまたは、(オプション入力)で文字列置換メカニズムを使用できます。xargs(最後の方法を使用している場合は、各行-Iごとに異なるプログラムが呼び出され、最大長にはいくつかの制限があります。詳細については、マニュアルページを参照してください。)

入力がファイルから来る場合(したがってオプションで提供されるメカニズムが利用できない場合-0)、xargsファイル名にスペースやその他の奇妙な文字が含まれているかどうかは非常に注意する必要があります。むしろ、意図しない結果を避ける方法を見つける必要があります。

たとえば、「my document.txt」というファイルがあり、リストに次のように書き込む場合

my document.txt

その後、ファイルに書き込まれたかのように渡されます。これが行うことは次のとおりです。

wc my document.txt

これにより、wcプログラムは2つのファイルを見つけます。 1つはmy、もう1つはdocument.txtです。

次の内容を伝える必要があります。

wc "my document.txt"

または

wc my\ document.txt

(すでに交換メカニズムを使用している場合は最初の方法が簡単になり、すでにファイルを編集している場合は2番目の方法が簡単になる可能性があります。)

-0まあ、可能であれば各エントリがヌル文字で区切られるように入力ファイルを編集しますxargs

関連情報