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

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 ответ1

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 с отметкой времени всех страниц, отсканированных в текущем каталоге.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .