批量删除前两个文件扩展名

Batch remove former of two file extensions

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

使用 ImageMagick,我完成得相对较快,现在我有多个带有双扩展名 *.JPG.gif 的文件。

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

这是我正在尝试使用 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”或文件名中除文件名末尾以外的任何地方,它都不会执行您想要的操作。引用,即使在您的情况下暂时没有必要,随着情况的变化和代码的复制和粘贴,引用仍然是一种很好的做法。