現在のディレクトリからファイルを取得し、.mp4 .mp3 .exeファイルのみを出力したいだけです。だから私はこれができると思った:
ls | grep \.mp4$ | grep \.mp3$ | grep \.exe$
ただし、最初のgrepはmp4のみを出力するため、他の2つのgrepは使用されません。
何か案は? PS、Slow Leopardでこのスクリプトを実行しています。
何故なの:
ls *.{mp3,exe,mp4}
どこで学んだかわかりませんが、これを使用しています。
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)'
egrep
-拡張grep-ここで役立ちます
ls | egrep '\.mp4$|\.mp3$|\.exe$'
仕事をする必要があります。
最も簡単な方法は、lsを使用することです
ls *.mp4 *.mp3 *.exe
念のため:find
を使用しないのはなぜですか?
find -iname '*.mp3' -o -iname '*.exe' -o -iname '*.mp4'
Grepは必要ありません。シェルワイルドカードがトリックを行います。
ls *.mp4 *.mp3 *.exe
実行した場合
shopt -s nullglob
一致しないグロブは完全に削除され、コマンドラインに展開されたままになりません。
大文字と小文字を区別しないグロビングが必要な場合(* .mp3はfoo.MP3と一致します):
shopt -s nocaseglob
まだ代替ソリューションを探している場合:
ls | grep -i -e '\\.tcl$' -e '\\.exe$' -e '\\.mp4$'
必要に応じて-eフラグを追加してください。
OSXユーザーの場合:
ls *.{mp3,exe,mp4}
を使用する場合、これらの拡張機能のいずれかに結果がない場合、エラーがスローされます。
ls *.(mp3|exe|mp4)
を使用すると、これらの拡張子に一致するすべてのファイルが返されます。拡張子の1つに0の結果があった場合でも。
ls | grep "\.mp4$
\.mp3$
\.exe$"
ls -R | findstr ".mp3"
ls -R
=>サブディレクトリを再帰的にリストします
私のために働いた1つの例を次に示します。
find <mainfolder path> -name '*myfiles.Java' | xargs -n 1 basename