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 {} +