5

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}'

行のエラーは何ですか?

4

6 に答える 6

15

私はこれがあなたのために働くべきだと思います

   find ~ -name "*.mp3" -o -name "*.ogg"

-o はブール値と同等ですor

于 2012-08-13T05:08:43.807 に答える
4

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 の機能です。

于 2012-08-13T05:27:28.257 に答える
2

ここに私がやったものがあります。. .

.ogg および .mp3 の場合

         find Music | grep '/*.ogg\|/*.mp3' | sort -u
于 2014-01-10T02:17:27.850 に答える
1

find完全なシェル ワイルドカード構文をサポートしていません (具体的には、中括弧はサポートしていません)。次のようなものを使用する必要があります。

find ~ -iname '*.mp3' -o -iname '*.ogg'
于 2012-08-13T05:08:12.697 に答える