2

所以基本上,我有一个文件夹,里面有一堆子文件夹,里面有 100 多个文件。我想获取所有 mp3 文件(真正的通用扩展名,因为我必须使用 jpg 等)并将它们移动到原始目录中的新文件夹。所以基本上文件结构是这样的:

/.../dir/recup1/file1.mp3

/.../dir/recup2/file2.mp3

... ETC。

我希望它看起来像这样:

/.../dir/music/file1.mp3

/.../dir/music/file2.mp3

... ETC。

我想我会使用一个 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 方式,我不会反对使用它)

4

2 回答 2

1

如果该music文件夹存在,那么以下应该工作 -

find /path/to/search -type f -iname "*.mp3" -exec mv {} path/to/music \;

A-exec command必须以 a 结尾;(因此您通常需要键入\;';'避免被 shell 解释)或 a +。不同之处在于 with ;,每个文件调用一次命令, with +,它被调用的次数尽可能少(通常是一次,但命令行有最大长度,因此它可能会被拆分)与所有文件名.

于 2012-01-02T22:19:20.793 回答
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/ \;

高温高压

于 2012-01-02T22:18:14.623 回答