簡體   English   中英

Bash 腳本在 SFTP 腳本后使用 ssconvert 批量將 convert.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 運行該腳本時
  • 在 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 一起使用 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM