[英]Change file extensions of multiple files in a directory with terminal/bash?
我正在开发一个简单的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并保持文件名。
想法? 建议?
尝试:
for file in *.dat; do mv "$file" "${file%dat}mp3"; done
或者,如果你的shell有它:
rename .dat .mp3 *.dat
现在,为什么你的命令不起作用:首先,当你将命令重命名为*.mp3
时,你的目录中只有一个文件,否则mv
会因*.mp3: not a directory
而失败*.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
)是一个目录。
对于Mac上的任何人来说,如果你有BREW,这很容易,如果你没有酿造,那么我的建议是得到它。 然后安装时只需这样做
$ brew install rename
然后一旦重命名只安装类型(在文件所在的目录中)
$ rename -s dat mp3 *
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.