Macos 如何在shel脚本中使用exiftool?

Macos 如何在shel脚本中使用exiftool?,macos,shell,automator,Macos,Shell,Automator,我在MacOS Catalina 10.15.3上 我正在使用zsh 我想创建一个Atomator应用程序,它可以为我从文件中删除元数据。Atomator应用程序的工作方式是,我将文件拖放到应用程序上,应用程序启动一个shell脚本,文件路径作为输入 我正在使用exiftools删除元数据 我首先测试了exiftools在终端中使用时是否有效: 它是有效的 但当我在Automator应用程序的shell脚本中使用exiftool时,它会说,它没有找到exiftools命令 以下是我的自动机工作流

我在MacOS Catalina 10.15.3上

我正在使用zsh

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

我正在使用exiftools删除元数据

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

它是有效的

但当我在Automator应用程序的shell脚本中使用exiftool时,它会说,它没有找到exiftools命令

以下是我的自动机工作流程:

自动化将运行以下shell脚本:

我对它进行了测试,文件路径正确地存储在$f变量中

但由于某些原因,自动化中的shellscript无法使用exiftool

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

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

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


非常感谢

我通过将exiftools移动到我的主目录中的一个文件夹解决了这个问题。 然后,我让shell脚本移动到此目录,并使用执行exiftool/

我的shellscript现在如下所示:


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

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

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

下面是我写剧本的方式:

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

我对macos和automator了解不多-请参阅控制台和automator中的echo$PATH输出。或者:找出exiftool在哪里,exfitool在哪里,脚本中的put/full/path/to/exfitool在哪里。谢谢,:D当我找到exiftool在哪里时,如何将其放入脚本中?像这样:/完整/路径/到/退出工具?或者像这样/full/path/to/exiftools-all=$path?只需将exiftools替换为/usr/bin/exiftools或类似内容即可。在你的终端上试试。好的,谢谢,我会试试的。我解决了问题,我的应用程序正在运行。我将exiftools移动到一个称为Tools的文件夹中,然后让shellscript移动到这个文件夹中,并使用执行ExifTool/似乎没有必要将exiftools移动到文件夹中。当然/usr/local/bin/exiftool-all=$f就足够了。
for f in "$@"
do
    echo "$f"
done

cd /Users/niklas/Programming/Tools/ExifTool/

./exiftool -all= "$f"

rm -r "$f"_original

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