【问题标题】:Bash script to Batch convert .xlsx files to csv files using ssconvert after SFTP script在 SFTP 脚本之后使用 ssconvert 将 .xlsx 文件批量转换为 csv 文件的 Bash 脚本
【发布时间】:2020-03-10 22:55:26
【问题描述】:

下面的命令在命令行模式下工作得很好

find . -maxdepth 1 -name "*.xlsx" -exec ssconvert {} --export-type=Gnumeric_stf:stf_csv \;

但是,在 SFTP 下载代码后在 Bash 脚本文件中添加相同内容时,它没有执行。请帮忙。谢谢!

Bash 脚本代码 -

/usr/bin/expect<<EOD

spawn /usr/bin/sftp -o Port=${PORT} username@hostname
expect "password:"
send "$Pass_Pwd\r"
expect "sftp>"
send "lcd ${Src_Dir}\r"
expect "sftp>"
send "mget ${File1}\r"
expect "sftp>"
send "mget ${File1}\r"
expect "sftp>"
send "bye\r"
EOD
echo "Download done"


find . -maxdepth 1 -name "*.xlsx" -exec ssconvert {} --export-type=Gnumeric_stf:stf_csv \;

【问题讨论】:

  • 谢谢你的链接,但我的主要目的是在sftp过程完成后执行ssconvert代码,我已经修改了问题,请找到它
  • “未执行”究竟是什么意思?计算机只是在嘲笑您,还是您甚至可能收到错误消息?在后一种情况下,如果您将其发布在此处可能会有所帮助。
  • @user1934428 - 感谢您的回复!但我想你可以用更好的方式这么说。当然,我可以更精确。因此它会下载所有文件并以“下载完成”结束。所以,不知何故,它忽略了最后一行。
  • 这个还是不解释。这意味着您没有看到最后一条消息。但是你说的“下载失败”,这和“没有显示消息”是不同的。我猜下载的文件不存在;那么,您发送的 ftp 命令是否有任何错误?

标签: linux bash csv converters ssconvert


【解决方案1】:

使用 find 可能会导致未执行的内容,因为它可能会产生不继承父变量的子进程。 根据我在您的代码中看到的情况,这不应该发生,但是:

  • 使用“./”作为目录容易出错,尤其是当您通过 cron 运行该脚本时
  • 在 find 命令中使用 -name ".xlsx" 可能会跳过在涉及最终用户时恰好存在的大写文件
  • 使用带有 find 的 while 循环将允许稍后扩展您的脚本,而不必担心传递变量来查找子进程

无论如何,这里有一个你可能想要编码的强化示例:

workdir = /data/ftpdownloads
cd "$workdir" || { echo 'Failed to chdir into $workdir' ; exit 1; }

# Insert your expect script here

while IFS= read -r -d $'\0' file; do
    ssconvert "$file" --export-type=Gnumeric_stf:stf_csv
done < <(find "$workdir" -type f -iname "*.xlsx" -print0)

免责声明:与 bash 一起使用 :)

【讨论】:

  • 哇!这就像一个魅力,非常感谢你:)
  • 嘿 Orsiris,有没有办法我可以用一些包装脚本替换
  • 脚本可能会被dash或其他东西执行。您可以尝试使用bash myscript.sh 真正运行它。如果不是这个原因,你仍然可以将 find 命令的结果输出到一个 tmp 文件中,然后从那里读取它而无需第二次替换 &lt;sign,从而使整个事情更便携。
猜你喜欢
  • 1970-01-01
  • 2017-06-24
  • 2017-03-30
  • 1970-01-01
  • 1970-01-01
  • 2016-12-25
  • 2012-07-29
  • 2015-06-16
  • 2015-06-07
相关资源
最近更新 更多