如何在 shell 脚本中使用 exiftool?
How can I use exiftool inside shel script?
我在 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命令没有出现它运行.
这是自动化应用程序的错误消息:
------------------------
非常感谢
我通过将 exiftools 移动到我的主目录中的文件夹解决了这个问题。
然后我让 shellscript 移动到这个目录并使用 . /
我的 shellscript 现在看起来像这样:
for f in "$@"
do
echo "$f"
done
cd /Users/niklas/Programming/Tools/ExifTool/
./exiftool -all= "$f"
rm -r "$f"_original
exit
"solution" 脚本有几个问题。首先,它不适用于多个文件(即 select Finder 中的多个文件,然后将它们全部拖到应用程序中)。它遍历文件,回显每个路径,但最后一个路径上只有 运行s exiftool
。要使它们全部 运行,请将对文件 进行操作的命令放在 循环 中,而不是在它之后(并删除 echo
-- 它只是示例代码中的一个占位符)。
其次,它不做任何错误检查;如果其中一个命令出现问题,它会愉快地继续,也许在错误的目录中,也许谁知道呢。您可以使用 &&
加入命令,只有当第一个命令成功时,它才会 运行 第二个命令。
第三,cd
在脚本中四处走动会导致脚本混乱,因为它改变了相对路径的含义(这里应该不是问题,但通常是一种不好的做法)。如果您需要引用不同目录中的文件(如 exiftool
可执行文件),通过路径指定其位置比先 cd
更安全。
这是我编写脚本的方式:
for f in "$@"
do
/Users/niklas/Programming/Tools/ExifTool/exiftool -all= "$f" &&
rm -r "$f_original"
done
我在 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命令没有出现它运行.
这是自动化应用程序的错误消息:
------------------------
非常感谢
我通过将 exiftools 移动到我的主目录中的文件夹解决了这个问题。 然后我让 shellscript 移动到这个目录并使用 . /
我的 shellscript 现在看起来像这样:
for f in "$@"
do
echo "$f"
done
cd /Users/niklas/Programming/Tools/ExifTool/
./exiftool -all= "$f"
rm -r "$f"_original
exit
"solution" 脚本有几个问题。首先,它不适用于多个文件(即 select Finder 中的多个文件,然后将它们全部拖到应用程序中)。它遍历文件,回显每个路径,但最后一个路径上只有 运行s exiftool
。要使它们全部 运行,请将对文件 进行操作的命令放在 循环 中,而不是在它之后(并删除 echo
-- 它只是示例代码中的一个占位符)。
其次,它不做任何错误检查;如果其中一个命令出现问题,它会愉快地继续,也许在错误的目录中,也许谁知道呢。您可以使用 &&
加入命令,只有当第一个命令成功时,它才会 运行 第二个命令。
第三,cd
在脚本中四处走动会导致脚本混乱,因为它改变了相对路径的含义(这里应该不是问题,但通常是一种不好的做法)。如果您需要引用不同目录中的文件(如 exiftool
可执行文件),通过路径指定其位置比先 cd
更安全。
这是我编写脚本的方式:
for f in "$@"
do
/Users/niklas/Programming/Tools/ExifTool/exiftool -all= "$f" &&
rm -r "$f_original"
done