ZSH выдает «недопустимый аргумент» при перенаправлении scanimage в файл с меткой времени на SMB

ZSH выдает «недопустимый аргумент» при перенаправлении scanimage в файл с меткой времени на SMB

Я слишком долго ломал голову над этим, так что, возможно, кто-то здесь сможет увидеть, что не так. Я пытаюсь создать команду для сканирования со сканера в файл с временной меткой в ​​моих документах.

scanimage -d "pixma:04A91746_57E9C3" --resolution 300 --format tiff > $(date +%Y.%m.%d-%H:%M:%S).tiff

Это приводит к ошибкеzsh: invalid argument: 2017.05.27-14:29:13.tiff

Как ни странно, если удалить секунды в строке формата даты, вот так, ошибка не возникает, но и файл не называется правильно:

scanimage -d "pixma:04A91746_57E9C3" --resolution 300 --format tiff > $(date +%Y.%m.%d-%H:%M).tiff

В итоге у меня получается файл с именем 2017.05.27-14, в котором отсутствуют минуты и расширение .tiff.

Чтобы еще больше все усложнить, все это работает отлично, когда не в общем ресурсе samba, но те же команды в общем ресурсе samba вызывают ошибку. Тестирование с echo вместо scanimage не выявило ничего интересного, так как использование echo заставляет его вести себя так, как и ожидалось.

решение1

Проблема оказалась в двоеточиях - поскольку мой общий ресурс samba не допускает имена файлов с двоеточиями, он выдавал эту ошибку. Удаление двоеточий из имени файла приводит к тому, что все работает отлично:

scanimage -d "pixma:04A91746_57E9C3" --resolution 300 --format tiff > $(date +%Y.%m.%d-%H.%M.%S).tiff

Если кому-то интересен готовый скрипт для сканирования и организации документов, вот он:

#!/bin/bash
finish="-1"
page=1
date=$(date +%Y.%m.%d-%H.%M.%S)
while [ "$finish" = '-1' ]; do
  echo -e "\e[1m\e[32m==>\e[0m Scanning page $page..."
  scanimage -d "pixma:04A91746_57E9C3" --resolution 300 --format tiff > $date-$page.tiff
  while true; do
    echo -en "  \e[1m\e[34m->\e[0m More pages? [y/n] "
    read answer
    case $answer in
      [Yy]* ) page=$((page+1)); break;;
      [Nn]* ) finish="1"; break;;
      * ) echo -e "  \e[1m\e[34m->\e[0m Please answer tes or no.";;
    esac
  done
done
echo -e "\e[1m\e[32m==>\e[0m Converting $page page(s) to PDF..."
convert $date-*.tiff $date.pdf
echo -e "\e[1m\e[32m==>\e[0m Cleaning up..."
rm $date-*.tiff

Я просто перехожу в любую папку (чеки, медицинские и т. д.) и запускаю scanfile. Результат — pdf-файл с временной меткой всех страниц, отсканированных в текущем каталоге.

Связанный контент