当将 scanimage 重定向到 SMB 上的带时间戳的文件时,ZSH 会显示“无效参数”

当将 scanimage 重定向到 SMB 上的带时间戳的文件时,ZSH 会显示“无效参数”

我已经为这个问题苦思冥想了很久,所以也许有人能看出问题所在。我正在尝试构建一个命令,以便从扫描仪扫描到文档中带有时间戳的文件。

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。

相关内容