この場合、xargsの使用が失敗するのはなぜですか?

この場合、xargsの使用が失敗するのはなぜですか?

私はその使い方を理解しようとし、xargs次の実験を行いました。

ls | xargs | touch

現在のディレクトリのファイルの日付とディレクトリを更新したいと思います。

少しありますが、愚かなこれは、より単純な形式を使用して同じ効果を得ることができるからです。

xargsそれを読み、STDIN他のコマンドのパラメータに変換するようです(デフォルトでは/bin/echoコマンドが指定されていない場合)。私が何かを間違って理解したのでしょうか?

失敗しましたが、その理由を知りたいです。

答え1

次のようにする必要があります。

ls | xargs touch

このコマンドは、stdinから読み取られた複数の文字列を使用してxargsコマンドを実行します。touchあなたの場合、stdin forはxargsパイプの出力端ですls

コマンド方法:

ls | xargs | touch

xargs標準入力から文字列(ファイル名)を読み取るコマンドはありません。この場合は、xargs各ファイル名を印刷し、touch標準入力でファイル名のリストを取得してください。ただし、touch標準入力では読み取られず、引数を提供していないため、次のエラーメッセージが表示されます。

touch: missing file operand
Try `touch --help' for more information.

(あなたの質問にこれを言及する必要があります)。

関連情報