Linuxでコマンド出力行を別のコマンドとして実行する

Linuxでコマンド出力行を別のコマンドとして実行する

私は次のコマンドを実行しています:

find ./ -type f -printf "wc -l \"%p\"\n"

これにより、次の出力が提供されます。

wc -l "ANLS 457567.pl"
wc -l "ANLS 457567.pl"

それでは、行全体を別のコマンドで実行したいと思います。

この目標をどのように達成できますか?

私はそれを使用してxargs出力をパラメータとして他のコマンドに渡すことができることを知っていますが、好奇心で(コマンド出力行を別のコマンドとして実行)ことが可能です。

ベストアンサー1

このようなコマンドをシェルにパイプできますが、すべてのグローブ、変数、その他の項目が拡張されるため、非常に問題が発生する可能性があります。

たとえば、アスタリスク(*、glob)またはドル記号($、変数、およびコマンド拡張)を含むファイル名は問題を引き起こします。すべての内容が正しく引用されていることを確認する必要があり、通常はファイル名自体に引用符が含まれる可能性があるため、簡単ではありません。


findただし、外部コマンド自体を実行できる場合は、次のようになります。

find ./  -type f -exec wc -l {} \;

theは{}現在のファイル名に置き換えられ、末尾(引用符)セミコロンが必要です。

少なくとも一部のバージョンは、find複数のファイル名付きコマンドを一度に実行するために使用できる代替形式をサポートして、多くの実行時間を節約します。

find ./  -type f -exec wc -l {} \+

おすすめ記事