当我使用带有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}'
该行的错误是什么?
答案 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