「xargs」と「file」の奇妙な「対応するファイルなし」エラー

「xargs」と「file」の奇妙な「対応するファイルなし」エラー

現在のディレクトリにあるすべてのファイルのMIMEタイプを取得したいと思います。なぜこれがうまくいかないのですか? OSXまたはLinuxでbashをテストしました。 「ファイル」はファイルが見つからないと文句を言いますが、まったく同じパスを使用して実行すると機能します。

$ find . -type f | xargs -n 1 -I FILE echo $(file --mime-type -b FILE)
ERROR: cannot open './foo.txt' (No such file or directory)
...
$ file --mime-type -b ./foo.txt
text/plain

もちろん、実際の世界では、応答を「エコー」するのではなく、他のコマンドでMIMEタイプの文字列を使用する必要があります。

これが私が解決できる最も簡単な問題です。ファイル名の置き換えについて何かを理解していないと思いますかxargs

ベストアンサー1

コマンドの置き換え$(file --mime-type -b FILE)は に渡される前にシェルによって実行されるため、xargs必要なものは表示されません。 xargsを介して引用して$(file --mime-type -b FILE)渡します。bash -c

find . -type f | xargs -n 1 -I FILE bash -c  'echo $(file --mime-type -b FILE)'

おすすめ記事