command1
以下のようにファイル名のリストを返すコマンド()があります。
/consumer/a.txt
/consumer/b.txt
/consumer/doesnotexist.txt
出力をパイプするときにcommand1 | xargs command2
command2
ファイルのいずれかが存在しないと、例外が発生します。
存在しないファイルをパイピングする前にどのように削除できますかcommand2
?次のことを楽しみにしています
command1 | xargs remove_nonexistant_files | xargs command2
command2
受けなければならない
/consumer/a.txt
/consumer/b.txt
入力として。
ベストアンサー1
command1 |
xargs sh -c 'for p do [ -f "$p" ] && printf "%s\n" "$p"; done' sh |
xargs command 2
途中の追加ビットは、デフォルトで指定されたxargs
コマンドライン引数を繰り返し、既存の一般ファイル(または一般ファイルへのシンボリックリンク)に対応するパス名を印刷する短いスクリプトへの別の呼び出しです。これにより、これらの既存のパス名がパイプラインの最後の部分に渡されます。
これは、すべてのパス名に新しい行、スペース、タブが含まれていないと想定します。