web-dev-qa-db-ja.com

findは再帰的に見つかりません

私はディレクトリ「home」にいて、このコマンドを実行します

find . -iname *.mov

そしてそれは生成します

./root/movies/Corey/holtorf/Intro.mov

今、私は「cd ..」して、同じコマンドを実行します

find . -iname *.mov

今回は「Intro.mov」は結果に含まれていません。これの背後にある理由は何ですか?また、現在のディレクトリで「.mov」で終わるすべてのファイルを再帰的に検索するコマンドは何ですか?ありがとう。

12
Sean Xiao

引数でワイルドカードを使用すると、シェルによって展開されます。これを防ぐには、「*。mov」と書く必要があります。

あなたの場合、シェルは見つけたファイルに展開しますbefore引数を渡してfindします。これにより、ファイルのリストが取得され、元のパターンに基づいて検索されなくなります。

21
ypnos

ホームディレクトリが実際にシンボリックリンクである場合は、-followを追加する必要がある場合があります。また、パターンを引用してください。そうしないと、シェルはfindに渡す前にパターンを展開しようとします。

find . -iname "*.mov" -follow
19
dogbane

まだコメントできませんので、回答として投稿します(お詫び申し上げます)。

この投稿をチェックしてください "find:パスは式の前になければなりません:"現在のディレクトリ内のファイルも検索する再帰検索を指定するにはどうすればよいですか?

また、役立つ可能性のある追加情報:現在のディレクトリで特定の名前のファイルを再帰的に検索するには、grepまたはfindのいずれかを使用できます。

grep -r "*.mov" .

または大文字と小文字を区別しない検索の場合

grep -ri "*.mov" .

そして見つけるために

find . -type f -exec grep -l "*.mov" {} +

また、便利なリンク http://www.cyberciti.biz/faq/howto-recursively-search-all-files-for-words/

4

私は使うだろう:

 grep -rn 'mov' .

再帰的な数値検索

1
Supplement