基本上,我有一个包含大量子文件夹的文件夹,其中包含超过100个文件。我想要获取所有的mp3文件(非常通用的扩展,因为我必须使用jpg等)并将它们移动到原始目录中的新文件夹。所以基本上文件结构如下所示:
/.../ DIR / recup1 / file1.mp3
/.../ DIR / recup2 / file2.mp3
......等等。
我希望它看起来像这样:
/.../ DIR /音乐/ file1.mp3
/.../ DIR /音乐/ file2.mp3
......等等。
我想我会使用一个沿着这些行看的bash脚本:
#!/bin/bash
STR=`find ./ -type f -name \*.mp3`
FILES=(echo $STR | tr ".mp3 " "\n")
for x in $FILES
do
echo "> [$x]"
done
我现在只是回声,但最终我想使用mv
将它移到正确的文件夹中。显然这不起作用,因为tr认为每个角色都是分隔符,所以如果你们有更好的主意我会很感激。
(仅供参考,我正在运行上网本Ubuntu,所以如果有一种类似于Windows搜索的GUI方式,我不会反对使用它)
答案 0 :(得分:1)
如果存在music
文件夹,则以下内容应该有效 -
find /path/to/search -type f -iname "*.mp3" -exec mv {} path/to/music \;
-exec command
必须以;
终止(因此您通常需要输入\;
或';'
以避免shell解释)或{{1} }。区别在于使用+
,每个文件调用一次命令;
,它被调用的次数尽可能少(通常一次,但命令行有一个最大长度,因此可能会拆分所有文件名。
答案 1 :(得分:0)
你可以这样做:
find /some/dir -type f -iname '*.mp3' -exec mv \{\} /where/to/move/ \;
\{\}
部分将替换为找到的文件名/路径。 \;
部分设置-exec
部分的结尾,不能省略。
如果要打印找到的内容,只需添加-print
标记,如:
find /some/dir -type f -iname '*.mp3' -print -exec mv \{\} /where/to/move/ \;
HTH