扫描多个文件扩展并复制到新目录(如果找到)

时间:2016-02-29 20:56:50

标签: linux bash ubuntu recursion file-search

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

我在这里使用这个教程来写这个,所以如果我不在线,请原谅我 find all m3

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

3 个答案:

答案 0 :(得分:2)

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

find / -type f \( -iname "*.mp4" -o -iname "*.mkv" -o -iname "*.wav" \) -exec mv {} ./Downloads/Media Files \;

答案 1 :(得分:2)

使用GNU bash 4:

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

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

     

nullglob:如果设置,bash允许不匹配任何文件的模式(请参阅路径名扩展)扩展为空字符串,而不是自己。

答案 2 :(得分:0)

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

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

了解reguar表达的力量,它将开启一个新的力量世界!