首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash脚本批量将.xlsx文件转换为csv文件,在SFTP脚本之后使用to转换

Bash脚本批量将.xlsx文件转换为csv文件,在SFTP脚本之后使用to转换
EN

Stack Overflow用户
提问于 2019-11-14 20:26:34
回答 1查看 748关注 0票数 0

下面的命令在命令行模式下运行得非常好

代码语言:javascript
复制
find . -maxdepth 1 -name "*.xlsx" -exec ssconvert {} --export-type=Gnumeric_stf:stf_csv \;

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

Bash脚本代码-

代码语言:javascript
复制
/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 \;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-15 07:54:46

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

使用"./“目录的

  • 很容易出错,特别是当您将通过cron
  • 运行该脚本时,使用find命令中的-name ".xlsx”可能跳过大写文件,这些文件恰好存在于最终用户参与时,使用带find的with循环
  • 将允许在以后扩展脚本,而不必担心传递变量以查找

子进程。

总之,下面是您可能需要编写的代码的一个强化示例:

代码语言:javascript
复制
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 :)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58865984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档