0

我正在使用Ubuntu,我需要递归搜索目录和 subs 以查找任何.mp4.mkv.wav文件。我看到这mmv可能是我最好的解决方案,但我无法使语法正确。那么我将如何将其转换为搜索文件名数组,或者我只想为我所追求的每个文件扩展名运行 3 次迭代?

我正在使用这里的教程来写这个,所以如果我无法 找到所有 m3 ,请原谅我

# find / -iname "*.mp4"  -type f -exec mv {} ./Downloads/Media Files \;
4

3 回答 3

2

您可以使用\(-o(或):

find / -type f \( -iname "*.mp4" -o -iname "*.mkv" -o -iname "*.wav" \) -exec mv {} ./Downloads/Media Files \;
于 2016-02-29T21:05:46.343 回答
2

使用 GNU bash 4:

shopt -s globstar nullglob
mv -v **/*.{mp4,mkv,wav} ./Downloads/Media Files

globstar: 如果设置,路径名扩展上下文中使用的模式 ** 将匹配所有文件以及零个或多个目录和子目录。如果模式后跟 /,则只有目录和子目录匹配。

nullglob:如果设置,bash 允许不匹配文件的模式(参见路径名扩展)扩展为空字符串,而不是它们本身。

于 2016-02-29T21:08:42.773 回答
0

将 -iname 替换为 -regex。Regex 默认理解 emacs 正则表达式(但您可以使用 -regextype 更改此行为):

find / -regex ".*\.mp4\|.*\.mkv\|.*\.wav" ...

学习正则表达式的力量,它将开启一个新的力量世界!

于 2016-02-29T21:17:43.837 回答