Bash 在 SFTP 脚本之后使用 ssconvert 将 .xlsx 文件批量转换为 csv 文件的脚本
Bash script to Batch convert .xlsx files to csv files using ssconvert after SFTP script
下面的命令在命令行模式下工作得很好
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 \;
使用 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 $'[=10=]' file; do
ssconvert "$file" --export-type=Gnumeric_stf:stf_csv
done < <(find "$workdir" -type f -iname "*.xlsx" -print0)
免责声明:与 bash 一起使用 :)
下面的命令在命令行模式下工作得很好
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 \;
使用 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 $'[=10=]' file; do
ssconvert "$file" --export-type=Gnumeric_stf:stf_csv
done < <(find "$workdir" -type f -iname "*.xlsx" -print0)
免责声明:与 bash 一起使用 :)