Как я могу использовать exiftool внутри скрипта shel? - PullRequest
0 голосов
/ 14 марта 2020

Я в MacOS Catalina 10.15.3

Я использую zsh

Я хочу создать приложение Atomator, которое удаляет метаданные из файлов для меня. Приложение Atomator работает таким образом, что я перетаскиваю Файл в приложении, и приложение запускает сценарий оболочки с указанием пути к файлу.

Я использую exiftools для удаления метаданных.

Сначала я проверил, работает ли exiftools, если я использую его в терминале:

image of my terminal

И это работает.

Но когда я использую exiftool в сценарии внутри моего приложения Automator, то он говорит, что не нашел команду "exiftools".

Здесь мой рабочий процесс Automator:

my Automator Workflow

И автоматизация запускает этот Shellscript:

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

xattr -c "$f"

exiftool -all= "$f"

rm -r "$f"_original

Я проверил это, и путь к файлу правильно хранится в переменной $ f.

Но по какой-то причине сценарий оболочки в Automation не может использовать exiftool.

И вторая ошибка в сообщении об ошибке не важно, потому что оно появляется потому, что команда exiftool не запускалась.

Это ошибка M essage приложения автоматизации:

my error message

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

Большое спасибо

Ответы [ 2 ]

0 голосов
/ 14 марта 2020

Есть несколько проблем со сценарием «решения». Во-первых, он не будет работать для нескольких файлов (т.е. выберите несколько файлов в Finder, а затем перетащите их все в приложение). Он перебирает файлы, повторяя каждый путь, но затем запускает exiftool только на последнем. Чтобы он работал на всех них, поместите команды, которые работают с файлами внутри for l oop, а не после него (и удалите echo - это просто там, как заполнитель в примере кода).

Во-вторых, проверка ошибок не выполняется; если что-то пойдет не так с одной из команд, она продолжит беспечно, возможно, не в том каталоге, может кто знает. Вы можете использовать && для объединения команд, и вторая команда будет выполняться только в случае успеха первой.

В-третьих, cd обход в скрипте может вызвать путаницу в скрипте, потому что это изменяет значение относительных путей (здесь не должно быть проблем, но обычно это плохая практика). Если вам нужно обратиться к файлу в другом каталоге (например, к исполняемому файлу exiftool), безопаснее указать его местоположение по пути, чем сначала к cd.

Вот как я бы это сделал написать скрипт:

for f in "$@"
do
    /Users/niklas/Programming/Tools/ExifTool/exiftool -all= "$f" &&
        rm -r "$f_original"
done
0 голосов
/ 14 марта 2020

Я решил проблему, переместив exiftools в папку в моем домашнем каталоге. Затем я позволил сценарию переместиться в этот каталог и выполнил exiftool. /

Мой шеллскрипт теперь выглядит так:

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

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

./exiftool -all= "$f"

rm -r "$f"_original

exit
...