使用terminal / bash更改目录中多个文件的文件扩展名?

时间:2011-12-18 13:21:45

标签: iphone bash terminal file-extension launch-daemon

我正在开发一个简单的launchdaemon,它将文件从一个目录复制到另一个目录。我已经把文件转移得很好了。

我只是希望目录中的文件是.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并保留文件名。

想法?建议?

2 个答案:

答案 0 :(得分:27)

尝试:

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

或者,如果你的shell有它:

rename .dat .mp3 *.dat

现在,为什么你的命令不起作用:首先,当你重命名为*.mp3时,你的目录中只有一个文件,而不是mv *.mp3: not a directory失败。

并且mv对文件globs没有任何魔力,它是扩展globs的 shell 。这意味着,如果您在目录中有此文件:

t.dat

你打字:

mv *.dat *.mp3

shell会将*.dat扩展为t.dat。但是,由于没有任何内容匹配*.mp3,shell将保持原样,这意味着完全展开的命令是:

mv t.dat *.mp3

这将创建一个名为*.mp3的文件。

另一方面,如果你有几个名为*.dat文件,如:

t1.dat t2.dat

该命令将扩展为:

mv t1.dat t2.dat *.mp3

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

答案 1 :(得分:15)

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

$ brew install rename

然后一旦重命名只安装类型(在文件所在的目录中)

$ rename -s dat mp3 *