Bash 批量删除两个文件扩展名中的前一个
我正在MacOSX 10.12上处理许多图片。 为了进行一些图像分析,我需要将格式从.JPG更改为.gif 使用ImageMagick我做得比较快,现在我有了多个扩展名为*.JPG.gif的文件 我想从文件名中删除“.JPG”部分,但由于某些原因,我所做的工作不起作用。(我应该说,这一步可能对我下一步要做的事情并不重要,但因为我有很多文件,所以尽可能简化它们的名称可能是最好的。我还应该说,我拥有所有超级用户权限,并且没有任何文件名实际包含刹车或空格,因此即使添加“”我的代码不会改变任何东西) 下面是我尝试使用bash脚本的内容:Bash 批量删除两个文件扩展名中的前一个,bash,macos,file-extension,Bash,Macos,File Extension,我正在MacOSX 10.12上处理许多图片。 为了进行一些图像分析,我需要将格式从.JPG更改为.gif 使用ImageMagick我做得比较快,现在我有了多个扩展名为*.JPG.gif的文件 我想从文件名中删除“.JPG”部分,但由于某些原因,我所做的工作不起作用。(我应该说,这一步可能对我下一步要做的事情并不重要,但因为我有很多文件,所以尽可能简化它们的名称可能是最好的。我还应该说,我拥有所有超级用户权限,并且没有任何文件名实际包含刹车或空格,因此即使添加“”我的代码不会改变任何东西) 下
#!/bin/bash
for file in /folder/*.JPG.gif
do
mv $file ${file#.JPG}
done
我的理解是,这段代码应该从$file中删除.JPG部分,从文件名的前面开始匹配。然而,当我调用ls命令来查看程序是否完成了它应该做的事情时,所有的名称仍然存在,并带有双扩展名
非常感谢您的帮助。修改您的
mv
命令如下:
#!/bin/bash
for file in /folder/*.JPG.gif
do
mv "$file" "${file/\.JPG}"
done
<>你的初始代码使用一个扩展来从一开始,而不是在中间移除文本。上面的展开式将删除字符串内部
请注意,这不是很可靠。如果路径或文件名中除文件名末尾之外的任何位置都有“.JPG”,则它将不会满足您的要求。引用,即使目前在您的案例中没有必要,但随着情况的变化,代码得到复制和粘贴,仍然是一种良好的做法。顺便说一句,我喜欢将此源代码作为bash中各种扩展形式的摘要:。