Shell: использование for в списке переменных
К сожалению, мои навыки работы с оболочкой очень плохие, и мне понадобится некоторая помощь в запуске простого скрипта на моем QNAP, чтобы исправить некоторые проблемы с датой в некоторых видео.
Сценарий, который я написал, очень прост:
- в данной папке
- проверьте, существуют ли файлы.mp4, начинающиеся с VID_
- если это так, для каждого из них выполните заданную команду exiftool
Вот сценарий, но я думаю, что я не использую правильный способ вызова переменной:
#!/bin/sh
# set target directories
dir="/share/Multimedia/Pictures/"
# move to target directory
cd "$dir"
# check if there is some .mp4 file starting with "VID_" in the folder
VID=$(ls -A $dir | grep 'VID_' | grep './mp4')
if
["$VID"];
then
# for each file in the list
for f in $VID
do
# change all date metadata according to its filename
exiftool "-*date<filename" -wm w $f
done
else
fi
Спасибо за вашу помощь!
ps: инструкция exiftool верна (за исключением, вероятно, переменной)
2 ответа
Нет необходимости в сценарии, это просто замедляет работу, поскольку вы должны вызывать ExifTool для каждого файла. ExifTool может сделать все файлы за один проход:ExifTool -ext mp4 '-*date<filename' -wm w /path/to/dir/VID_*
-ext mp4
options ограничивает команду только файлами mp4. Поскольку вы, похоже, находитесь в системе linux/mac, двойные кавычки пришлось заменить на одинарные. Двойные кавычки необходимы в системах Windows, одинарные кавычки в системах Linux / Mac.
Возможно, ваш код не работает из-за использования:
grep './mp4'
Так как нет /
до mp4
,
Лучше иметь свой скрипт как:
#!/bin/sh
# set target directories
dir="/share/Multimedia/Pictures/"
# move to target directory
cd "$dir"
for f in VID_*.mp4; do
exiftool "-*date<filename" -wm w "$f"
done
Нет необходимости анализировать вывод ls
здесь и нет необходимости использовать grep
так как шар VID_*.mp4
сделает работу по поиску правильных файлов.