2017-03-13 5 views
0

私はmdfindを使って特定のファイルを探し出そうとしています。 Windowsのドライブを検索するには時間がかかり、Macを使用しているため、findを使用していません。私はmdutilを使ってインデックスを作成し、パス内のファイルがexampleで始まるパターンのファイルを検索したいだけです。 "/ Volumes/DRIVE/SOME/PATH/DAD14 -BLAH-BLAH.jpg"と表示されます。 mdfindを使って500kより大きいjpgを探し、パターンでパスをgrepする簡単な方法はありますか?以下は私が思いついたコードですが、結果は返されません。どんな援助も深く感謝しています。mdfindをパターンでgrepにパイプしてからcp

cat filelist.txt | while read -r FILE; 
    do mdfind -onlyin /Volumes/DRIVE/ 'kMDItemKind = "*image" && kMDItemFSSize > 500000' -name "$FILE" -0 
    | xargs -0 -I{} grep -i -E '.*\/[a-zA-Z]{1,3}[0-9]+.*\.(jpe?g|png|tiff?|psd)' {} 
    | xargs -0 -I{} cp -a {} ./images; done; 

ベース

答えて

0

あなたはgrepコマンドのxargsを使用する必要はありません。そうすることは、パターンの一致のために、見つけたファイルの内容のをグロッピングすることを意味します。あなたは実際にはmdfindの出力をgrepしたいと思います。

-0mdfindと使用したくないということも意味します。 grepは一致する行を出力するので、各ファイルパスを別々の行に置く必要があります。したがって、最後のxargsコマンドで-0を使用したくない場合もあります。

おそらく、拡張子が文字列の最後にあるようにする必要があります。また、パターン内の明示的なスラッシュ(/)を文字列の最後のスラッシュにしたいとします。

cat filelist.txt | while read -r FILE; 
    do mdfind -onlyin /Volumes/DRIVE/ 'kMDItemKind = "*image" && kMDItemFSSize > 500000' -name "$FILE" 
    | grep -i -E '.*\/[a-zA-Z]{1,3}[0-9]+[^/]*\.(jpe?g|png|tiff?|psd)$' 
    | xargs -I{} cp -a {} ./images; done; 
+0

、その迅速な対応をありがとう、私はそれを試してみましたが、次のエラー取得維持:** xargsのを:引数に十分なスペースを** – user5188505

+0

それは私が最初に使用した理由スペースが故に、ファイル名であることだろう-0オプション? – user5188505

+0

残念ながら、私は残りの 'xargs'から' -0'を削除することを怠りました。私はそれを修正しました。 –

関連する問題