234

ファイル名に文字列を含む現在のディレクトリからファイルを返すコマンドを探していました。something で始まるファイルや何かで終わるファイルを検索できるコマンドを見てきlocateました。findfirst_word**.jpg

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

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

このファイルと文字列を含む他のファイルを返すにはどうすればよいtouchですか? 次のようなコマンドを使用してfind '/touch/'

4

8 に答える 8

387

使用find

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

「文字列」を含む現在のディレクトリ内のすべてのファイルを検索し(maxdepth 1再帰的に必要な場合は削除します)、画面に出力します。

':'を含むファイルを避けたい場合は、次のように入力できます。

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

使用したい場合grep(ただし、ファイルの内容を確認したくない場合は必要ないと思います)、次を使用できます。

ls | grep touch

しかし、繰り返しますが、これfindはあなたのタスクにとってより優れた、よりクリーンなソリューションです。

于 2012-07-04T12:25:12.053 に答える
17

次のように grep を使用します。

grep -R "touch" .

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

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

于 2012-07-04T12:20:50.883 に答える
3
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

サンプル出力:

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

-type fファイルのみを検索するオプションを渡します。

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

-inameGNU または BSD (OS X を含む) バージョンのfind コマンドで動作します。お使いのバージョンの find コマンドが をサポートしていない場合は、コマンド-inameを使用して次の構文を試してください。grep

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

または試す

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
于 2016-08-10T14:17:40.297 に答える
0

文字列が名前の先頭にある場合は、これを行うことができます

$ compgen -f .bash
.bashrc
.bash_profile
.bash_prompt
于 2012-12-18T06:16:44.347 に答える
0

すでに提供されている多くのソリューションの代替手段は、 glob を利用することです**bashオプションglobstar( shopt -s globstar) を使用する場合、または を使用する場合は、これzshに glob**を使用できます。

**/bar

指定されたファイルの再帰的なディレクトリ検索を行いますbar(現在のディレクトリ内のファイルを含む可能性がありますbar)。これは、同じパス セグメント内の他の形式のグロビングと組み合わせることはできないことに注意してください。その場合、*演算子は通常の効果に戻ります。

zshここでとの間には微妙な違いがあることに注意してbashください。bashディレクトリへのソフトリンクをトラバースしますが、トラバースしませzshん。これには、でグロブを使用する必要があり***/ますzsh

于 2018-12-03T12:32:26.937 に答える