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

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

Estou coçando a cabeça com isso há muito tempo, então talvez alguém aqui consiga ver o que está errado. Estou tentando criar um comando para digitalizar do meu scanner para um arquivo com carimbo de data/hora em meus documentos.

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

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

Curiosamente, removendo os segundos na string de formato de data dessa forma, o erro não ocorre, mas o arquivo também 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 geram o erro. Testar com echo em vez de scanimage não revela nada de interessante, pois usar echo faz com que ele se comporte conforme o esperado.

Responder1

Acontece que o problema foram os dois pontos - como meu compartilhamento de samba não permite nomes de arquivos com dois pontos, ocorreria esse erro. Remover os dois pontos do meu nome de arquivo faz com que ele funcione perfeitamente:

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

Caso alguém tenha curiosidade sobre o roteiro completo para 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 executo o scanfile. O resultado é um PDF com carimbo de data e hora de todas as páginas digitalizadas no diretório atual.

informação relacionada