ZSH は、スキャンイメージを SMB 上のタイムスタンプ付きファイルにリダイレクトするときに「無効な引数」を主張します。

ZSH は、スキャンイメージを SMB 上のタイムスタンプ付きファイルにリダイレクトするときに「無効な引数」を主張します。

これについては長い間頭を悩ませてきましたが、ここで誰かが何が間違っているのかわかるかもしれません。スキャナーからドキュメント内のタイムスタンプ付きファイルをスキャンするコマンドを作成しようとしています。

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 共有内で同じコマンドを実行するとエラーが発生します。scanimage の代わりに echo を使用してテストしても、echo を使用すると期待どおりに動作するため、興味深い結果は得られません。

答え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

任意のフォルダ (領収書、医療など) に cd して scanfile を実行するだけです。結果は、現在のディレクトリでスキャンされたすべてのページのタイムスタンプ付き PDF です。

関連情報