ZSH meldet "ungültiges Argument", wenn Scanimage auf eine mit Zeitstempel versehene Datei auf SMB umgeleitet wird

ZSH meldet "ungültiges Argument", wenn Scanimage auf eine mit Zeitstempel versehene Datei auf SMB umgeleitet wird

Ich habe mir schon zu lange den Kopf darüber zerbrochen, vielleicht kann hier jemand herausfinden, was schief läuft. Ich versuche, einen Befehl zu erstellen, um von meinem Scanner in eine mit einem Zeitstempel versehene Datei in meinen Dokumenten zu scannen.

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

Dies erzeugt den Fehlerzsh: invalid argument: 2017.05.27-14:29:13.tiff

Kurioserweise tritt der Fehler nicht auf, wenn man die Sekunden aus der Datumsformatzeichenfolge wie folgt entfernt, aber die Datei wird auch nicht richtig benannt:

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

Am Ende erhalte ich eine Datei mit dem Namen 2017.05.27-14, in der die Minuten und die Erweiterung .tiff fehlen.

Um die Sache noch komplizierter zu machen, funktioniert das alles perfekt, wenn es sich nicht um eine Samba-Freigabe handelt, aber die gleichen Befehle in einer Samba-Freigabe führen zum Fehler. Tests mit Echo statt Scanimage ergeben nichts Interessantes, da die Verwendung von Echo dazu führt, dass es sich wie erwartet verhält.

Antwort1

Das Problem waren offenbar die Doppelpunkte. Da meine Samba-Freigabe keine Dateinamen mit Doppelpunkten zulässt, tritt dieser Fehler auf. Wenn ich die Doppelpunkte aus meinem Dateinamen entferne, funktioniert es einwandfrei:

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

Falls jemand neugierig auf das fertige Skript zum Scannen und Organisieren von Dokumenten ist, hier ist es:

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

Ich wechsle einfach in einen beliebigen Ordner (Quittungen, medizinische Dokumente usw.) und führe scanfile aus. Das Ergebnis ist eine mit Zeitstempel versehene PDF-Datei aller im aktuellen Verzeichnis gescannten Seiten.

verwandte Informationen