2012-01-16 16 views
1

ファイル名に任意の拡張子を含む任意のルート内のファイルを検索したいと思います。 、私はこれを試し、その情報に基づいて How to delete all files with certain suffix before file extensionfindコマンドで特定のファイル拡張子を見つける

: 私はこの記事を見た

find . -iregex ".*\.\(wav\|aif\|wave\|aiff\)" 

これははず仕事のように思えるが、私はどんな結果が端末ウィンドウに印刷されません。 。

誰でもアドバイスを提供できますか?私はOSX 10.7に JML

答えて

5

find . -regex ".*\.\(wav\|aif\|wave\|aiff\)" 

あなたがまたは、|に脱出、\、文字が欠落していた、私は実際にあなたが示唆したものを試してみましたapologies-事業者

+0

。私は私の質問を変更しました。 – jml

+0

regexではない 'find'コマンドは出力をコンソールに出力しますか?正規表現の責任を別のユーティリティに渡すために、次のようなものを試すことができます: 'find。 | grep -e "。* \。\(wav \ | aif \)" ' – ajshower

+0

これは完璧です。ありがとう...私はそれらを削除するユーティリティにどのように渡すことができますか? – jml

2

emacsスタイルの正規表現ということです

おかげで、よ?

もしそうでない場合は、-regextypeを試してみてください。 (古風)Linux上find manページから:

  • -regextype type

    は、コマンドラインで、後に発生し-regex-iregexテストが理解正規表現の構文を変更します。現在実装されているタイプは、emacs(これがデフォルトです)、posix-awk,posix-basic,posix-egrepおよびposix-extendedです。 findため

のMacOS X上で

、マニュアルページは言う: -regexよう

-iregex pattern

が、試合は大文字と小文字を区別しません。

-regex pattern

真ファイルのパス全体が、正規表現を用いたパターンと一致した場合。 './foo/xyzzy'というファイルと一致させるには、正規表現 '.*/[xyz]*'または '.*/foo/.*'を使用できますが、 'xyzzy'または '/foo/'は使用できません。

find pdf -iregex ".*/.*.pdf" 

は、それらの完全な私のフォルダにPDFファイルの全体の多くを見つけたが、これらの変異体のいずれもが何も見つからなかっ:

いくつかの実験をすることを示している

find pdf -iregex ".*/.*\.(pdf|doc|docx)" 
find pdf -iregex ".*/.*\.\(pdf|doc|docx\)" 
find pdf -iregex ".*/.*.(pdf|doc|docx)" 
find pdf -iregex ".*/.*.\(pdf|doc|docx\)" 

その結果、1をMacOS X(BSD)findでサポートされている正規表現に、認識された文字の中に括弧とパイプが含まれていないと仮定しなければなりません。 「同情:man 7 re_formatはそれを示唆しているが、そうではない。 -regextypeオプションはMacOS X(BSD)ではサポートされていないようです。

だから、それはGNU findをインストールするか、N個の異なるファイル拡張子のためのNの別々の検索を行う、または一般的にファイルのための1つの検索を行うと、あなたが興味を持っているファイルをキャッチするegrep '\.(aff|wave?|aiff)$'を使用するのが最も簡単かもしれません。ということむしろ、ファイル名に改行を使用しないことを前提としています(スペースはOKですが、改行はありません)。あなたが探している

関連する問題