web-dev-qa-db-ja.com

lsおよびgrepを使用して特定の拡張子を持つファイルを一覧表示する

現在のディレクトリからファイルを取得し、.mp4 .mp3 .exeファイルのみを出力したいだけです。だから私はこれができると思った:

ls | grep \.mp4$ | grep \.mp3$ | grep \.exe$

ただし、最初のgrepはmp4のみを出力するため、他の2つのgrepは使用されません。

何か案は? PS、Slow Leopardでこのスクリプトを実行しています。

133
Mint

何故なの:

ls *.{mp3,exe,mp4}

どこで学んだかわかりませんが、これを使用しています。

308
meder omuraliev

findで正規表現を使用します。

find . -iregex '.*\.\(mp3\|mp4\|exe\)' -printf '%f\n'

ファイル名をパイプする場合:

find . -iregex '.*\.\(mp3\|mp4\|exe\)' -printf '%f\0' | xargs -0 dosomething

これにより、スペースまたは改行を含むファイル名が保護されます。

OS X findは、-E(拡張)オプションが使用されている場合にのみ代替をサポートします。

find -E . -regex '.*\.(mp3|mp4|exe)'
43

egrep-拡張grep-ここで役立ちます

ls | egrep '\.mp4$|\.mp3$|\.exe$'

仕事をする必要があります。

34
mob

最も簡単な方法は、lsを使用することです

ls *.mp4 *.mp3 *.exe
11
Joshua K

念のため:findを使用しないのはなぜですか?

find -iname '*.mp3' -o -iname '*.exe' -o -iname '*.mp4'
8
P Shved

Grepは必要ありません。シェルワイルドカードがトリックを行います。

ls *.mp4 *.mp3 *.exe

実行した場合

shopt -s nullglob

一致しないグロブは完全に削除され、コマンドラインに展開されたままになりません。

大文字と小文字を区別しないグロビングが必要な場合(* .mp3はfoo.MP3と一致します):

shopt -s nocaseglob
5
camh

まだ代替ソリューションを探している場合:

ls | grep -i -e '\\.tcl$' -e '\\.exe$' -e '\\.mp4$'

必要に応じて-eフラグを追加してください。

4
Hai Vu

OSXユーザーの場合

ls *.{mp3,exe,mp4}を使用する場合、これらの拡張機能のいずれかに結果がない場合、エラーがスローされます。

ls *.(mp3|exe|mp4)を使用すると、これらの拡張子に一致するすべてのファイルが返されます。拡張子の1つに0の結果があった場合でも

4
james2doyle
ls | grep "\.mp4$
\.mp3$
\.exe$"
2
Jeff Mc

ls -R | findstr ".mp3"

ls -R =>サブディレクトリを再帰的にリストします

2
vardamanpk

私のために働いた1つの例を次に示します。

find <mainfolder path> -name '*myfiles.Java' | xargs -n 1 basename
0
Jyoti Prakash