
我已經在這個問題上摸不著頭腦太久了,所以也許這裡有人能夠看到出了什麼問題。我正在嘗試建立一個命令來從掃描器掃描到文件中帶有時間戳記的文件。
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 共享中執行相同的命令會提示錯誤。使用 echo 而不是 scanimage 進行測試不會顯示任何有趣的內容,因為使用 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。