2011-06-22 2 views
0

ファイルが2回印刷されるのはなぜですか?bash findを使用するとファイルが2回表示される

find . *.{h,cc} -maxdepth 1 -type f 
./file7.h 
./file8.h 
./file9.cc 
file7.h 
file8.h 
file9.cc 

これは間違いありませんか?ファイルパターンを指定するにはどうすればよいですか?

答えて

4

.の下に最初に見つかったので、実際にはfindに指定されたファイル名の下に2つあります。おそらく、-nameを使用して、ワイルドカードをエスケープすることを意味していました。

+0

これを-nameを含むように変更する必要がありますか? – Mark

0
find . -name *.h -o -name *.cc -maxdepth 1 -type f 
+0

エラーが発生しました – Mark

+0

2番目の-nameを含むのを忘れました。ただ答えを更新しました。 – Ravi

+0

-oは優先度が低いため、かっこが必要です。 – Tobu

0

find *.{h,cpp} -maxdepth 1 -type f
これは多分に役立ちます。

+0

thats not right – Mark

+0

@マークなぜ?それは動作し、*。{h、cpp}はパスを示しているようですが、私は確信していません。 – renenglish

+0

あなたはツリー全体を検索しています。 – Mark

2
find . -maxdepth 1 \(-name \*.h -o -name \*.cc \) -type f 
1

あなたは、単に現在のディレクトリ内のファイルを探しているなら、なぜ単純に使用しない:使用

$ find . -maxdepth 1 -type f \(-name "*.h" -o -name "*.cc" \) 

$ shopt -s expglob 
$ ls *.*(h|cc) */*.*(h|cc) 

は、そうでなければ、あなたがこのliek何かをしなければなりませんかっこでは最初の行を行い、次にそれを-type fと-maxdepthと組み合わせます。

関連する問題