it-swarm-ja.com

検索コマンドの使用

たくさんのディレクトリがあります。これらのディレクトリ内には、カバーレターと作業のZipアーカイブがあります。すばやく簡単なクエリを実行してすべてのカバーレターを開き、作業フォルダーを確認する価値があるかどうかを判断できるようにしたかったのです。

find . | grep cover\.pdf | xargs open    #OS X has open linked to "open" the file

これは機能しません。私も色々と泥だらけになりましたprint0xargs -0バリエーションはほとんど成功していません。これを行う適切な方法は何ですか?

4
Josh K

まず、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(ゼロ文字)のサポートを確認してください。

3
maxschlepzig

これは機能するはずです:

見つける。 -name cover\.pdf -exec open '{}' \;

次のようにテストできます。

見つける。 -name cover\.pdf -exec ls -l '{}' \;

OSXでmanページがどのように表示されるかはわかりませんが、Examplesを検索すると、findmanページにさまざまな例があります。それらをチェックすることで、脳をリフレッシュすることがよくあります。

2
gabe.

システムのxargsが-nオプションをサポートしている場合は、以下を試すことができます。

find . | grep cover\.pdf | xargs -n 1 open

1
Hemant