ZSH afirma "argumento no válido" al redirigir scanimage a un archivo con marca de tiempo en SMB

ZSH afirma "argumento no válido" al redirigir scanimage a un archivo con marca de tiempo en SMB

He estado rascándome la cabeza con esto durante demasiado tiempo, así que tal vez alguien aquí pueda ver qué está yendo mal. Estoy intentando crear un comando para escanear desde mi escáner a un archivo con marca de tiempo en mis documentos.

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

Esto produce el errorzsh: invalid argument: 2017.05.27-14:29:13.tiff

Por extraño que parezca, al eliminar los segundos en la cadena de formato de fecha de esta manera, no se produce el error, pero el archivo tampoco tiene el nombre correcto:

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

Termino con un archivo llamado 2017.05.27-14, al que le faltan los minutos y la extensión .tiff.

Para complicar aún más las cosas, todo esto funciona perfectamente cuando no está en un recurso compartido de samba, pero los mismos comandos en un recurso compartido de samba generan el error. Las pruebas con echo en lugar de scanimage no revelan nada interesante ya que el uso de echo hace que se comporte como se esperaba.

Respuesta1

Resulta que el problema fueron los dos puntos: dado que mi recurso compartido de samba no permite nombres de archivos con dos puntos, daría este error. Al eliminar los dos puntos de mi nombre de archivo, funciona perfectamente:

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

Si alguien tiene curiosidad sobre el script completo para escanear y organizar documentos, aquí lo tiene:

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

Simplemente ingreso a cualquier carpeta (recibos, información médica, etc.) y ejecuto el archivo de escaneo. El resultado es un pdf con marca de tiempo de todas las páginas escaneadas en el directorio actual.

información relacionada