我已经为这个问题苦思冥想了很久,所以也许有人能看出问题所在。我正在尝试构建一个命令,以便从扫描仪扫描到文档中带有时间戳的文件。
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
我只需进入任意文件夹(收据、医疗等)并运行 scanfile。结果是当前目录中扫描的所有页面的带时间戳的 pdf。