たくさんのディレクトリがあります。これらのディレクトリ内には、カバーレターと作業のZipアーカイブがあります。すばやく簡単なクエリを実行してすべてのカバーレターを開き、作業フォルダーを確認する価値があるかどうかを判断できるようにしたかったのです。
find . | grep cover\.pdf | xargs open #OS X has open linked to "open" the file
これは機能しません。私も色々と泥だらけになりましたprint0
、xargs -0
バリエーションはほとんど成功していません。これを行う適切な方法は何ですか?
まず、Mac-OSXボックスで実際に使用しているfind
/xargs
のバージョンを常に確認してください。おそらく、BSD/GNUの動作/オプションを期待し、GNU/BSDバージョンを使用するでしょう。
openが複数の引数をサポートしているかどうかわからない。そうでない場合は、次のようにxargs
を呼び出します。
xargs -n 1 open
(つまり、xargsはすべての引数に対して追加のオープンプロセスを実行します)
また、ファイル名/パスにスペースが含まれている場合、find | xargs
なしの-print0/-0
は失敗することが予想されることに注意してください。
ああ、あなたが
find -print0 | grep something | xargs -0 foo
その場合、grep
はすべての\0
文字によって混乱します。
GNU grep
(少なくとも)は-z
オプションを知っています。したがって、どちらが機能するかは次のとおりです。
find -print0 | grep -z something | xargs -0 foo
使用しているgrep
バージョンを確認してください
grep --version
または、grep
のマニュアルページで\0
(ゼロ文字)のサポートを確認してください。
これは機能するはずです:
見つける。 -name cover\.pdf -exec open '{}' \;
次のようにテストできます。
見つける。 -name cover\.pdf -exec ls -l '{}' \;
OSXでmanページがどのように表示されるかはわかりませんが、Examplesを検索すると、findmanページにさまざまな例があります。それらをチェックすることで、脳をリフレッシュすることがよくあります。
システムのxargsが-nオプションをサポートしている場合は、以下を試すことができます。
find . | grep cover\.pdf | xargs -n 1 open