web-dev-qa-db-ja.com

ディレクトリ内の名前「ABC」で始まるすべてのファイルを検索する方法は?

特定の名前で始まるファイルを検索する必要があります。特定のパターンで始まる複数のファイルが存在する可能性があり、ディレクトリに存在するすべてのそのようなファイルをリストしたいと思います。

58
R11G

既存の回答を完了するには:

ls

デフォルトのディレクトリリストユーティリティlsは、シェルのワイルドカードと組み合わせて使用​​できます。パターンabcですべてのファイルを検索するには:

ls abc*   # list all files starting with abc---
ls *abc*  # list all files containing --abc--
ls *abc   # list all files ending with --abc

ファイル拡張子は検索結果にも関連することに注意してください。


tree

ディレクトリツリーのファイルをリストする必要がある場合は、treeを発行して、指定された pattern を検索することもできます。

tree -P 'abc*'  # list directory tree of file starting with abc---
tree -l 'def*'  # exclude files starting with def---

この場合、tree自体がワイルドカードをサポートします。

59
Takkat

findコマンドを使用して、パターンでファイルを検索できます

find . -type f -name "abc*" 

上記のコマンドは、現在の作業ディレクトリの下にあるabcで始まるファイルを検索します。

-name 'abc'は、完全に一致するファイルをリストします。例:abc

使用することもできます

 -iname
 -regex 

パターンを使用してファイル名を検索するfindコマンドのオプション

39
devav2

実行する方法に応じて、多くの方法があります。一般に、それらを単にリストしたい場合は、以下を使用して端末で実行できます。

find | grep '^\./ABC'

... ABCをテキストに置き換えます。

コマンドを理解するために、少し分解してみましょう。

  • findは、現在のディレクトリとそのサブディレクトリの下にあるすべてのファイルをリストします。単独で使用すると、そこにすべてがリストされます。 findは、./で始まる各ファイルまたはディレクトリを出力し、それらのパスが現在のディレクトリに相対的であることを示すことに注意してください。これは、ABCだけでなく./ABCで始まる結果を検索することを意味するため、これに注意することが重要です。

  • パイプ文字|は、あるコマンドの出力を別のコマンドにリダイレクトします。この場合、findの出力はgrepにリダイレクトされます。これはパイピングと呼ばれます。

  • grepは出力を取得し、指定されたパターン^\./ABCを使用してそれをフィルタリングします。

    • シェルが内部の特殊文字を解釈しないように、パターンは単一引用符' 'で引用されていることに注意してください。
  • パターン自体は、正規表現または略してregexと呼ばれる特定の構文で記述されています。 Regexは、マスターすれば非常に強力な検索ツールであり、 this などのサイトで詳細を説明していますが、grepは本格的な正規表現ではないことに注意してくださいエンジンとあなたはそれですべてを行うことはできません。

  • 私たちの目的のために:

    • 正規表現の^は、文字列の先頭に一致します。これにより、ファイル名の先頭でパターンが一致しない場合、パターンに一致しなくなります。

    • 正規表現の.には特別な意味もあります。これは「ここの任意の1文字に一致する」という意味です。リテラルドットとして使用する場合は、その前にバックスラッシュ\を使用して「エスケープ」する必要があります。 (ええ、私たちの場合、任意の文字に一致させることは無害ですが、完全を期すために行いました。)

7
Yamaho

gREPを使用できます。これは最も簡単なソリューションだと思います。おそらく、他のgrepパラメータを追加して、一致をより正確にすることもできます。

tree | grep ABC
3

Nautilusファイルマネージャと正規表現を使用して、特定のパターンを検索できます。

これを行うには、以下のようにギアメニューの(一致するアイテムを選択)をクリックします(または Ctrl+s)。

enter image description here

次に、単に 正規表現ABC*と入力して検証します。

enter image description here

名前がパターンに一致するすべてのファイルが自動的に選択されます。

enter image description here

Ubuntu 12.10(Quantal)で GNOME PPAのNautilus 3.6。*を使用しています。

2
remjg

私にとって最も簡単な解決策

ls | grep PATTERN

ここでは、PATTERNで任意の正規表現を指定できます。

たとえば、名前に「ab」が含まれるファイルを検索するには、次のように入力します

ls | grep ".*ab.*"

「ab」で始まるファイルを見つけるには、次のように入力します

ls | grep "^ab"
1

ABC*ファイルがあるディレクトリがわからず、数百万のファイルがある場合は、locateコマンドが最速の方法です。

$ locate /ABC
/mnt/clone/home/rick/.cache/mozilla/firefox/9fu0cuql.default/cache2/entries/ABC6AD2FEC16465049B48D39FD2FE538258F2A34
/mnt/clone/home/rick/.cache/mozilla/firefox/9fu0cuql.default/cache2/entries/ABCBFDA54262F47253F95ED6ED4131A465EE0E39
/mnt/clone/usr/src/linux-headers-5.0.1-050001/tools/lib/lockdep/tests/ABCABC.sh
/mnt/clone/usr/src/linux-headers-5.0.1-050001/tools/lib/lockdep/tests/ABCDBCDA.sh
/mnt/clone/usr/src/linux-headers-5.0.1-050001/tools/lib/lockdep/tests/ABCDBDDA.sh
/mnt/old/home/rick/.cache/mozilla/firefox/3vkvi6ov.default/cache2/entries/ABC0C99FCEABAD0C6AA2078CD025A1CDE48D7BA1
/usr/src/linux-headers-5.0.1-050001/tools/lib/lockdep/tests/ABCABC.sh
/usr/src/linux-headers-5.0.1-050001/tools/lib/lockdep/tests/ABCDBCDA.sh
/usr/src/linux-headers-5.0.1-050001/tools/lib/lockdep/tests/ABCDBDDA.sh

注:

  • 上記のコマンドは、100万のファイルで実行するのに1秒かかります。
  • 比較すると、/ルートディレクトリで始まるfindコマンドは非常に長い時間になり、多くの許可エラーを生成します。
  • ファイルが今日作成された場合、最初にSudo updatedbを実行する必要があります。
1

私がルートディレクトリにいて、etcディレクトリのリストだけが必要だと仮定します。

find -type d -name "etc"

私たちが得る結果、

[root@unix /]# find -type d -name "etc"

./etc
./usr/lib/firefox/bundled/etc
./usr/lib/unix-yarn/etc
./usr/lib/unix/etc
./usr/lib/festival/etc
./usr/bin/lib/vmware-tools/lib64/libconf/etc
./usr/bin/lib/vmware-tools/lib32/libconf/etc
./usr/etc
./usr/share/doc/oddjob-0.30/sample/etc
./usr/share/festival/lib/etc
./usr/local/etc
./usr/Java/jdk1.7.0_25/lib/visualvm/etc
./home/user1/Desktop/VMware Tools/vmware-tools-distrib/lib/lib64/libconf/etc
./home/user1/Desktop/VMware Tools/vmware-tools-distrib/lib/lib32/libconf/etc
./home/user1/Desktop/VMware Tools/vmware-tools-distrib/etc
./home/user1/Desktop/VMware Tools/vmware-tools-distrib/caf/etc

もう一つの例、

また、次のように書くこともできます。

ls | grep "etc"

我々が得る、

etc
0
Bhaskar Das
printf "%s" /path/to/files/ABC*

これは、両端で固定されているグロブパターンマッチングです。これは、「ABC」、「ABC.txt」、「ABC123」などの「ABC」で始まるファイルのすべてのオカレンスに一致しますが、「xABC」には一致しません。ここで 'printf'の代わりに 'ls'を使用するコマンドラインでは安全な代替方法ですが、同意する人の意見によっては、 'ls'をスクリプトで使用するのは安全ではありません。その場合、globprintパターンマッチングで 'printf'を使用することは安全と見なされます。スクリプトでこれを使用する場合、「printf」の出力には、出力ストリームの最後まで改行文字が含まれません。

printf "%s" /path/to/files/ABC*  

返却値:

/path/to/files/ABC /path/to/files/ABC123

各インスタンスの後に改行が必要な場合:

printf "%s\n" /path/to/files/ABC*

返却値:

/path/to/files/ABC 

/path/to/files/ABC123

「/ path/to/files /」は、「printf」コマンドを実行したときにそのように入力した場合、出力に残ります。それなしでは、ファイル名のみが表示されます。

printf "%s" ABC* 

返却値

ABC ABC123

ファイルが存在するディレクトリ内でコマンドを実行すると仮定します。

0

私が使う

ls | grep abc

または

ls -la | grep abc

Abcで始まるだけでなく、すべてのファイルがabcで表示されます。しかし、これを行うのは私にとって非常に簡単な方法です。

0
Mariano Cali

Command-t 私のお気に入りのvimプラグインの1つで、それはRubyベースのプラグインです FZF。

Comamnd-TとFZFを使用することにより、次のような非常に高速な「ファジー」メカニズムで検索を実行できます。

  • ファイルとバッファを開く
  • タグへのジャンプとヘルプ
  • コマンドの実行、または以前の検索とコマンド
  • 最小限のキーストロークで。

ご覧のように

enter image description here

私は常に新しいターミナルを開いてコマンド履歴を検索し、ヒットします:

CTRL+R

端末タブに書き込むことにより、すべてのフォルダーを再帰的に検索することに加えて:

fzf

次に、ファイル名を開始します

ABC

また、内部にvimと書くことができます

:CommandT 

特に大きなフォルダーで特に役立ちます。

0
HMagdy

Python:

$ python -c 'import sys,os;found=[os.path.join(r,i) for r,s,f in os.walk(".") for i in f if i.startswith("ABC")];map(lambda x: sys.stdout.write(x+"\n") ,found)'

Perl:

$ Perl -le 'use File::Find;find(sub{ -f && $_ =~/^ABC/ && print $File::Find::name  },".")' 
0