findコマンドの「...」複数行出力を置き換えます。

findコマンドの「...」複数行出力を置き換えます。

find見つかった各ファイルを処理するには、コマンド出力を別のコマンドに置き換える必要があります。たとえば、次のようになります。

mdls `find ~/target_dir/ -iname '*some*' -depth 1`

mdls指定されたファイルのメタデータ属性を取得するOS Xのコマンド。パイプをサポートしていないためfind ... | mdls失敗します。)

上記のコマンドは正しく機能しますが、名前にスペースが含まれているファイルでは期待どおりに失敗します。引用符を追加すると、トラブルシューティングsedに役立ちます。

$ find ~/target_dir/ -iname '*some*' -depth 1 | sed 's/\(.*\)/"\1"/'
"/Users/shau-kote/target_dir//secondsomefile"
"/Users/shau-kote/target_dir//some file with spaces in name"
"/Users/shau-kote/target_dir//somefile"

ああ、今私のmdlsすべてのファイルに対して私のコマンドは失敗します。

$ mdls `find ~/target_dir/ -iname '*some*' -depth 1 | sed 's/\(.*\)/"\1"/'`
"/Users/shau-kote/target_dir//secondsomefile": could not find "/Users/shau-kote/target_dir//secondsomefile".

mdlsのすべてのファイル名が表示されるようにするにはどうすればよいですかfind

ありがとうございます。

ポリスチレンこれが重要なのか自明なのかはよく分からないが、

mdls "/Users/shau-kote/target_dir//secondsomefile"

うまくいきます。

答え1

使用されたfindコマンド-exec

find ~/target_dir/ -iname '*some*' -depth 1 -exec mdls {} \;

これはmdlsで見つかったすべての一致するファイル名に対して実行されますfind。すべてのファイル名、スペースや改行文字などを含むファイル名でも機能します。

mdlsコマンドラインで複数のファイル名を使用できる場合は、コマンドを終了する代わりに-exec使用できます。例えば+\;

find ~/target_dir/ -iname '*some*' -depth 1 -exec mdls {} +

関連情報