在linux中使用bash查找文件夹中的所有音频文件

时间:2012-08-13 05:04:06

标签: linux bash find ls

当我使用带有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}'

该行的错误是什么?

6 个答案:

答案 0 :(得分:9)

我认为这应该对你有用

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

-o相当于布尔or

答案 1 :(得分:3)

如果您启用了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

如果没有匹配的glob文件,那么glob将会保持不变。并且ls会将其视为文字文件名;它不了解globs / wildcards。

find ~ -iname '*.{mp3,ogg}'不起作用,因为find不支持扩展,这是一个bash功能。

答案 2 :(得分:2)

这是我刚刚做的一个。 。

表示.ogg和.mp3

         find Music | grep '/*.ogg\|/*.mp3' | sort -u

答案 3 :(得分:1)

find不支持完整的shell通配符语法(具体而言,不支持花括号)。你需要使用这样的东西:

find ~ -iname '*.mp3' -o -iname '*.ogg'

答案 4 :(得分:0)

这个将为您提供具有mp3或音频扩展名的文件。

find . -print0 | xargs -0 file | grep -i audio| cut -f 1 -d ':'

解释为:

find . -print0 查找(列出)每个文件和输出与空终止符

xargs -0 file使用以空字符分隔的标准输入(或管道输入)作为第一个参数运行file(命令)。

grep -i audio获取包含单词audio的行(不区分大小写)

cut -f 1 -d ':'删除了:所删除的输入并打印第一部分。

答案 5 :(得分:0)

怎么回事?

file * | grep audio