ls
コマンドでワイルドカードを使用している場合、機能します。
$ ls '*.{mp3,ogg}' # Showing only two formats in the command
cannot access *.mp3: No such file or directory
1.ogg 2.ogg 3.ogg
ただし、find コマンドを使用しても機能しません
$ find ~ -iname '*.{mp3,ogg}'
行のエラーは何ですか?
私はこれがあなたのために働くべきだと思います
find ~ -name "*.mp3" -o -name "*.ogg"
-o はブール値と同等ですor
extglob( shopt -s extglob
) を有効にすると、 を使用できます*.@(ogg|mp3)
。
shopt -s extglob
printf '%s\n' *.@(mp3|ogg)
再帰も必要な場合は、globstar を有効にします (bash 4.0 以降が必要です)
shopt -s extglob globstar
printf '%s\n' **/*.@(mp3|ogg)
を使用するls *.{mp3,ogg}
と、ブレース展開とパス名展開が組み合わされます。何が起こるか:
ls *.{mp3,ogg}
ls *.mp3 *.ogg # after brace expansion
ls '*.mp3' 1.ogg 2.ogg 3.ogg # after pathname expansion
グロブに一致するファイルがない場合、グロブはそのまま渡されます。そしてls
、それを文字通りのファイル名として扱います。グロブ/ワイルドカードについては知りません。
find ~ -iname '*.{mp3,ogg}'
ブレース展開を行わないため、これはfind
機能しません。これは bash の機能です。
ここに私がやったものがあります。. .
.ogg および .mp3 の場合
find Music | grep '/*.ogg\|/*.mp3' | sort -u
find
完全なシェル ワイルドカード構文をサポートしていません (具体的には、中括弧はサポートしていません)。次のようなものを使用する必要があります。
find ~ -iname '*.mp3' -o -iname '*.ogg'