web-dev-qa-db-ja.com

ファイル名の一部のみの一致に基づいてファイルを一覧表示するにはどうすればよいですか?

たとえば、フォルダに多くのファイルがあります

Kiran.txt
Kiran1.txt
Kiran221.txt
Kiran144.txt
Time.csv
Timer.csv
Timer2.csv
Timer444.csv
Timer266.csv
Account.sh
Account3.sh
Account3333.sh
Account3333.sh
Account333333.sh

このディレクトリから、grepを使用して、ファイル名の一部に基づいてファイルを表示する方法を知りたいです。たとえば、「Account」で始まるファイルや「.sh」で終わるファイルなどです。

3
Lavanya

findできます

find -type f -name "Account*"

代替案2(これにはフォルダも含まれる場合があります)

ls -1 Account*

代替案3(grep、これにはフォルダーも含まれる可能性があります)

ls -1 | grep -E "^Account"
8
ajreal

ワイルドカードを使用する( このワイルドカードは何ですか? ):

ls *.sh

*は、終了する.shの前にあるものと一致します。表示には他のlsオプションを使用します。 -l長いリストにします。それを使って何ができるかについての詳細は、man lsを参照してください。

lsは、ファイルだけでなく、.shで終わるディレクトリもリストすることに注意してください。


findを使用して、この問題を解決することもできます。

find . -type f -maxdepth 1 -name "*.sh"

このコマンドは、「実際の」ファイルのみを一覧表示します。後で見つかったファイルで何かをしたい場合は、findを使用することをお勧めします。これは -execオプション で実行できます。

7
slhck

次のコマンドを使用します

   ls *.sh

標準的な解決策はパイプです:

ls | grep ^Account

「アカウントで始まるファイル」のような単純なものでは、グロブも機能します。

ls Account*

ただし、一般に、grepの方が強力であり、フォルダーが本当にいっぱいの場合、コマンドラインの最大長がオーバーフローするリスクはありません。

3
Kilian Foth