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

问题描述 投票:0回答:1

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

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 \;
linux bash csv converters ssconvert
1个回答
0
投票

使用find可能会导致未执行的操作,因为它可能会产生不继承父变量的子流程。从我在您的代码中看到的,这不应该发生,但是:

  • 使用“ ./”作为目录容易出错,尤其是当您将通过cron运行该脚本时
  • 在查找命令中使用-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一起使用:)

© www.soinside.com 2019 - 2024. All rights reserved.