ZSH afirma “argumento inválido” ao redirecionar o scanimage para um arquivo com registro de data e hora no SMB

0

Eu estive coçando minha cabeça por um tempo demais, então talvez alguém aqui possa ver o que está errado. Estou tentando criar um comando para digitalizar do meu scanner para um arquivo com registro de data e hora em meus documentos.

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

Isso produz o erro zsh: invalid argument: 2017.05.27-14:29:13.tiff

Por incrível que pareça, removendo os segundos na string de formato de data, o erro não ocorre, mas o arquivo não é nomeado corretamente:

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

Acabo com um arquivo chamado 2017.05.27-14 , faltando os minutos e a extensão .tiff.

Para complicar ainda mais as coisas, tudo isso funciona perfeitamente quando não está em um compartilhamento de samba, mas os mesmos comandos em um compartilhamento de samba provocam o erro. Testar com echo em vez de scanimage não revela nada de interessante, já que usar o echo faz com que ele se comporte como esperado.

    
por Stephen Smith 27.05.2017 / 20:32

1 resposta

1

O problema acaba sendo o ponto e vírgula - já que meu compartilhamento de samba não permite nomes de arquivos com dois-pontos, isso daria esse erro. Remover os dois pontos do meu nome de arquivo resulta em um funcionamento perfeito:

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

Se alguém estiver curioso sobre o script completo de digitalização e organização de documentos, aqui está:

#!/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

Eu apenas cd em qualquer pasta (recibos, médicos, etc) e execute o scanfile. Resultado é um pdf com timestamp de todas as páginas verificadas no diretório atual.

    
por 30.05.2017 / 23:11