Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 批量删除两个文件扩展名中的前一个_Bash_Macos_File Extension - Fatal编程技术网

Bash 批量删除两个文件扩展名中的前一个

Bash 批量删除两个文件扩展名中的前一个,bash,macos,file-extension,Bash,Macos,File Extension,我正在MacOSX 10.12上处理许多图片。 为了进行一些图像分析,我需要将格式从.JPG更改为.gif 使用ImageMagick我做得比较快,现在我有了多个扩展名为*.JPG.gif的文件 我想从文件名中删除“.JPG”部分,但由于某些原因,我所做的工作不起作用。(我应该说,这一步可能对我下一步要做的事情并不重要,但因为我有很多文件,所以尽可能简化它们的名称可能是最好的。我还应该说,我拥有所有超级用户权限,并且没有任何文件名实际包含刹车或空格,因此即使添加“”我的代码不会改变任何东西) 下

我正在MacOSX 10.12上处理许多图片。 为了进行一些图像分析,我需要将格式从.JPG更改为.gif

使用ImageMagick我做得比较快,现在我有了多个扩展名为*.JPG.gif的文件

我想从文件名中删除“.JPG”部分,但由于某些原因,我所做的工作不起作用。(我应该说,这一步可能对我下一步要做的事情并不重要,但因为我有很多文件,所以尽可能简化它们的名称可能是最好的。我还应该说,我拥有所有超级用户权限,并且没有任何文件名实际包含刹车或空格,因此即使添加“”我的代码不会改变任何东西)

下面是我尝试使用bash脚本的内容:

    #!/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中各种扩展形式的摘要:。