8

我正在开发一个简单的启动守护程序,它将文件从一个目录复制到另一个目录。我已经把文件传输过来了。

我只希望目录中的文件是 .mp3 而不是 .dat

一些文件如下所示:

6546785.8786.dat
3678685.9834.dat
4658679.4375.dat

我希望它们看起来像这样:

6546785.8786.mp3
3678685.9834.mp3
4658679.4375.mp3

这是我在 bash 脚本末尾重命名文件扩展名的内容。

cd $mp3_dir
mv *.dat *.mp3
exit 0

问题是文件以 *.mp3 而不是 6546785.8786.mp3 的形式出现

当另一个 6546785.8786.dat 文件导入到 $mp3_dir 时,*.mp3 将被新的 .mp3 覆盖

我只需要将 .dat 文件扩展名重命名.mp3 并保留文件名。

想法?建议?

4

2 回答 2

27

尝试:

for file in *.dat; do mv "$file" "${file%dat}mp3"; done

或者,如果你的 shell 有它:

rename .dat .mp3 *.dat

现在,为什么您的命令不起作用:首先,可以肯定的是,当您的目录重命名为 时,您的目录中只有一个文件*.mp3,否则mv会以*.mp3: not a directory.

而且 mv 对文件 glob 没有任何作用,它是扩展 glob的外壳。这意味着,如果您在目录中有此文件:

t.dat

你输入:

mv *.dat *.mp3

外壳将扩展*.datt.dat. 但是,由于没有任何匹配项*.mp3,shell 会保持原样,这意味着完全扩展的命令是:

mv t.dat *.mp3

这将创建一个文件,从字面上看,*.mp3.

另一方面,如果您有多个名为*.dat的文件,例如:

t1.dat t2.dat

该命令将扩展为:

mv t1.dat t2.dat *.mp3

但这会失败:如果 有两个以上的参数mv,它期望最后一个参数(即*.mp3)是一个目录。

于 2011-12-18T13:28:02.003 回答
16

对于 Mac 上的任何人来说,如果你有 BREW,这很容易,如果你没有 brew,那么我的建议是得到它。然后安装时只需执行此操作

$ brew install rename

然后一旦安装了重命名,只需键入(在文件所在的目录中)

$ rename -s dat mp3 *
于 2013-11-14T20:14:28.137 回答