私は現在、入力をgrepして特定のファイルタイプ(たとえば、Zip)かどうかを確認するスクリプトを作成しようとしていますが、ファイルタイプの前のテキストは何でもかまいません。
_something.Zip
this.Zip
that.Zip
_
すべてカテゴリに分類されます。私はワイルドカードを使用してこれらをgrepしようとしていますが、これまでのところこれを試しました
_grep ".*.Zip"
_
しかし、それを行うたびに、_.Zip
_ファイルは問題なく見つかりますが、_.Zip
_の後に追加の文字がある場合、たとえば_.zippppppp
_または_.zipdsjdskjc
_はまだgrepによって取得されます。そうは言っても、grepが_.Zip
_の後に追加の文字がある一致を表示しないようにするにはどうすればよいですか?
行の終わりを$
でテストし、2番目の.
をバックスラッシュでエスケープして、ピリオドのみに一致し、文字には一致しないようにします。
grep ".*\.Zip$"
ただし、現在のディレクトリにあるすべてのls *.Zip
ファイル、またはサブディレクトリにあるすべての.Zip
ファイルのfind . -name "*.Zip"
を一覧表示する場合は、.Zip
がより自然な方法です。 (を含む)から始まり、現在のディレクトリ。
UNIXでは、次を試してください。
find . -name \*.Zip -print
いくつかのことを行う必要があります。次のようになります。
grep '.*\.Zip$'
2番目のドットをエスケープする必要があるため、文字とは一致せず、ドットとのみ一致します。単一引用符を使用すると、エスケープが少し簡単になります。
行の最後にドル記号が必要です。これは、行の最後に「Zip」が発生することを示すためです。
これを使用して、フォルダー内のファイルの種類の一覧を取得します。
find . -type f | egrep -i -E -o "\.{1}\w*$" | sort -su
たとえば、出力:
.DS_Store
.MP3
.aif
.aiff
.asd
.doc
.flac
.jpg
.m4a
.m4p
.m4r
.mp3
.pdf
.png
.txt
.wav
.wma
.Zip
ボーナス:と
find . -type f | egrep -i -E -o "\.{1}\w*$" | sort | uniq -c
ファイル数を取得します:
106 .DS_Store
35 .MP3
89 .aif
5 .aiff
525 .asd
1 .doc
60 .flac
48 .jpg
149 .m4a
11 .m4p
1 .m4r
12844 .mp3
1 .pdf
5 .png
9 .txt
108 .wav
44 .wma
2 .Zip
試してください:grep -o -E "(\\.([A-z])+)+"
これを使用して、マルチドット/複数の拡張機能を取得しました。したがって、入力が_hello.tar.gz
_の場合、_.tar.gz
_が出力されます。シングルドットの場合は、grep -o -E "\\.([A-z])+$"
を使用します。 Cygwin/MingW + MSYSでテスト済み。
Grepを使用して、特定の拡張子を持つすべてのファイルを見つけることもできます。
find .|grep -e "\.gz$"
.
は現在のフォルダーを意味します。現在のフォルダー以外のフォルダーを指定する場合は、.
をフォルダーのパスに置き換えてください。次に例を示します。.gz
で終わり、/ var/logフォルダーにあるすべてのファイルを検索します。
find /var/log/ |grep -e "\.gz$"
出力は次のようになります。
✘ ⚙> find /var/log/ |grep -e "\.gz$"
/var/log//mail.log.1.gz
/var/log//mail.log.0.gz
/var/log//system.log.3.gz
/var/log//system.log.7.gz
/var/log//system.log.6.gz
/var/log//system.log.2.gz
/var/log//system.log.5.gz
/var/log//system.log.1.gz
/var/log//system.log.0.gz
/var/log//system.log.4.gz
$
記号は、基本的にファイル拡張子がgzで終わっていることを示しています
他の回答のいくつかを確認するだけです。 .*
は必要ありません。特定のファイル拡張子を探している場合は、大文字と小文字を区別しないように-iを含めるのが最善です。たとえば、ファイルがHELLO.Zipの場合。引用符も必要ないと思います。
grep -i \.Zip$
上記の例のもう1つの修正/アドオン:
# multi-dotted/multiple extensions
grep -oEi "(\\.([A-z0-9])+)+" file.txt
# single dotted
grep -oEi "\\.([A-z0-9])+$" file.txt
これにより、「。mp3」などのファイル拡張子が取得されます。
単に行う:
grep ".*.Zip$"
「$」は行末を示します