【问题标题】:How can I use exiftool inside shel script?如何在 shell 脚本中使用 exiftool?
【发布时间】:2020-06-25 20:56:42
【问题描述】:

我在 MacOS Catalina 10.15.3 上

我正在使用 zsh

我想创建一个 Atomator 应用程序,它可以为我从文件中删除元数据。 Atomator 应用程序的工作方式是,我将文件拖放到应用程序上,应用程序启动一个 shellscript,文件路径作为输入。

我正在使用 exiftools 删除元数据。

我首先测试了如果我在终端中使用 exiftools 是否有效:

而且有效。

但是当我在我的 Automator 应用程序的 shellscript 中使用 exiftool 时,它会说,它没有找到命令“exiftools”。

这是我的 Automator 工作流程:

自动化运行这个 Shellscript:

for f in "$@"
do
    echo "$f"
done

xattr -c "$f"

exiftool -all= "$f"

rm -r "$f"_original

我测试了一下,文件路径正确存储在$f变量中。

但由于某种原因,Automation 中的 shellscript 不能使用 exiftool。

并且错误信息中的第二个错误并不重要,因为它出现是因为exiftool命令没有运行。

这是自动化应用程序的错误消息:

------------

非常感谢

【问题讨论】:

  • 我对 macos 和 automator 不太了解 - 请参阅控制台和 automator 中的 echo "$PATH" 输出。或者:找出exiftoolwhereis exfitool 的位置并将/full/path/to/exfitool 放入您的脚本中。
  • 谢谢, :D 当我发现它在哪里时,我如何将它放在我的脚本中?像这样:#!/full/path/to/exiftools ?或像这样。 /full/path/to/exiftools -all= "$PATH" ?
  • 只需将exiftools 替换为/usr/bin/exiftools 或类似名称。前任。从您的终端尝试一下。
  • 好的,谢谢,我试试看
  • 我解决了这个问题,我的应用程序现在可以运行了。我将 exiftools 移动到一个名为 Tools 的文件夹中,然后让 shellscript 移动到该文件夹​​并使用 .exiftol 执行 exiftol。 /

标签: macos shell automator


【解决方案1】:

“解决方案”脚本存在几个问题。首先,它不适用于多个文件(即在 Finder 中选择多个文件,然后将它们全部拖到应用程序中)。它遍历文件,回显每个路径,但它只在最后一个路径上运行exiftool。要使其在所有这些文件上运行,请将对文件进行操作的命令放在 for 循环中,而不是在它之后(并删除echo - 它只是作为占位符存在在示例代码中)。

第二,它不做任何错误检查;如果其中一个命令出现问题,它会愉快地继续,也许在错误的目录中,也许谁知道。您可以使用&& 来加入命令,只有第一个命令成功时它才会运行第二个命令。

第三,cd在脚本中到处乱跑可能会导致脚本混乱,因为它会改变相对路径的含义(这里不应该是问题,但通常是不好的做法)。如果您需要引用不同目录中的文件(例如 exiftool 可执行文件),通过路径指定其位置比先通过 cd 更安全。

这是我编写脚本的方式:

for f in "$@"
do
    /Users/niklas/Programming/Tools/ExifTool/exiftool -all= "$f" &&
        rm -r "$f_original"
done

【讨论】:

    【解决方案2】:

    我通过将 exiftools 移动到我的主目录中的文件夹解决了这个问题。 然后我让 shellscript 移动到这个目录并执行 exiftool 。 /

    我的 shellscript 现在看起来像这样:

    for f in "$@"
    do
        echo "$f"
    done
    
    cd /Users/niklas/Programming/Tools/ExifTool/
    
    ./exiftool -all= "$f"
    
    rm -r "$f"_original
    
    exit
    

    【讨论】:

    • 似乎没有必要将 exiftools 移动到文件夹中。当然/usr/local/bin/exiftool -all= "$f" 就足够了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-20
    • 2010-09-06
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多