在子目录中移动多个文件(和/或通过多个字符分隔符拆分字符串)[bash]

时间:2012-01-02 21:59:34

标签: bash split mv

基本上,我有一个包含大量子文件夹的文件夹,其中包含超过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方式,我不会反对使用它)

2 个答案:

答案 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