2012-07-04 26 views
103

現在のディレクトリからファイル名の文字列を含むファイルを返すコマンドを探しています。 first_word*で始まるファイル、または*.jpgで終わるファイルを見つけることができるlocatefindコマンドを見ました。Linux - 文字列を含む名前のファイルを見つける

ファイル名に文字列を含むファイルのリストを返すにはどうすればよいですか?

たとえば、2012-06-04-touch-multiple-files-in-linux.markdownが現在のディレクトリにあるファイルである場合。

このファイルと文字列touchを含む他のファイルを返す方法はありますか?次のようなfind '/touch/'

+0

は疑問があるfindコマンドのバージョンが-inameをサポートしていない場合は、grepコマンドを使用して、次の構文を試してみてください混乱する。文字列を含むファイル、または*名前*に上記の文字列を含むファイルを検索したいですか?最初の質問は 'man grep'と答えられ、2番目の質問は' man find'と答えられます。なぜあなたは、人を使うのではなく、私は知りません。 –

+1

ありがとう!最初の文は、ファイルの内容であるかファイル名であるかを指定しませんでした。更新しました。 – Dru

答えて

157

使用find

find . -maxdepth 1 -name "*string*" -print

それは「文字列」を含む(あなたはそれが再帰したい場合maxdepth 1を削除)現在のディレクトリ内のすべてのファイルを検索し、画面上にそれを印刷します。

あなたが含まれているファイルを回避したい場合

「:」、次のように入力します。

find . -maxdepth 1 -name "*string*" ! -name "*:*" -print

あなたは(私はそれは限り、あなたがしたくないよう必要はないと思うgrepを使用したい場合ファイルの内容を確認してください)あなたが使用することができます。

ls | grep touch

しかし、私は繰り返し、findはあなたの仕事のためのより良いとクリーンなソリューションです。

+0

ありがとう@Zagorax。これは正確に行います。コマンドがそれほど長いものではなかったのを願います:) – Dru

+1

@Dru、コロンを避けたい場合は、ケースをカバーするように修正されました。 'find'は非常に強力なツールですが、どうにかして '長く'なければなりません。 :) – Zagorax

+0

ありがとう最初の1つは、コンテンツを返すことなく完全にそれをしました。 – Dru

12

使用のgrepなどのコマンドを使用:

grep -R "touch" . 

-Rは、再帰を意味します。サブディレクトリに移動したくない場合は、スキップしてください。

-iは、「大文字小文字を区別する」を意味します。これは試してみる価値があるかもしれません。

+0

素晴らしい私はいくつかのファイルの内容が ':'に続くことに気づいた。それを差し控えるのにとにかくありますか?おそらくオプションを使用しますか? – Dru

+1

試してください: 'grep -R" touch "。 | cut -d ":" -f 2' – carlspring

+0

これは、ファイルの内容のみを生成するようです。あなたは本質的に私の質問に答えましたが、私はコンテンツの源泉徴収のためにいくつかの掘削を試みることができます。 – Dru

0

文字列は、名前の先頭にある場合は、以下のように、-nameオプションの前にする必要があります。この

$ compgen -f .bash 
.bashrc 
.bash_profile 
.bash_prompt 
+3

'compgen'はこの釘のための適切なハンマーではありません。この小さなツールは*利用可能なコマンド*をリストするように設計されているので、* current *ディレクトリ(スクリプトでもよい)にファイルをリストし、ファイル名や検索ファイルの先頭を再帰的にも見過ごすこともできません内容はほとんど役に立たない。 – msanford

2

-maxdepthオプションを行うことができます。、

find . -maxdepth 1 -name "string" -print 
+0

"文字列"の前後に*を付ける必要があります。 – Aaron

1
find $HOME -name "hello.c" -print 

これにより、$HOME(つまり/home/username/)のシステムで "hello.c"という名前のファイルが検索され、パス名が表示されます:

/Users/user/Downloads/hello.c 
/Users/user/hello.c 

ただし、HELLO.CまたはHellO.Cと一致しません。大文字小文字を区別しないパスが-inameオプションで一致するには、次のように:

find $HOME -iname "hello.c" -print 

サンプル出力:どちらか

find /dir/to/search -type f -iname "fooBar.conf.sample" -print 
find $HOME -type f -iname "fooBar.conf.sample" -print 

-iname作品:

/Users/user/Downloads/hello.c 
/Users/user/Downloads/Y/Hello.C 
/Users/user/Downloads/Z/HELLO.c 
/Users/user/hello.c 

は、ファイルを検索のみに-type fオプションを渡しますGNUまたはBSD(OS Xを含む)バージョンfindコマンドで。

find $HOME | grep -i "hello.c" 
find $HOME -name "*" -print | grep -i "hello.c" 

ORてみ

find $HOME -name '[hH][eE][lL][lL][oO].[cC]' -print 

サンプル出力:

/Users/user/Downloads/Z/HELLO.C 
/Users/user/Downloads/Z/HEllO.c 
/Users/user/Downloads/hello.c 
/Users/user/hello.c 
0
grep -R "somestring" | cut -d ":" -f 1 
+0

これは別の質問に対する答えと思われますが、あなたが説明をしていないため、質問者や他の人には分かりません。 –

関連する問題