Shell

用於 sftp 的 Shell 讀取腳本

  • May 15, 2015

我有這個工作:

% cat read.sh
!/bin/sh

file=list.txt

while read line
do
   echo "$line"
cut -d' ' -f27 | sed -n '$p' > file2
done < "$file"


% cat list.txt 
sftp> #!/bin/sh
sftp> 
sftp> cd u/aaa
sftp> ls -lrt x_*.csv
-rwxr-xr-x    0 1001     1001     12274972 May 13 21:07 x_20150501.csv
-rw-r--r--    0 1001     1001            0 May 13 21:44 x_20150601.csv
-rw-r--r--    0 1001     1001            0 May 13 21:44 x_20150701.csv
-rw-r--r--    0 1001     1001            0 May 13 21:44 x_20150801.csv
-rw-r--r--    0 1001     1001            0 May 13 21:44 x_20150901.csv
-rw-r--r--    0 1001     1001            0 May 13 21:45 x_20151001.csv
-rw-r--r--    0 1001     1001            0 May 13 21:45 x_20151101.csv
-rw-r--r--    0 1001     1001            0 May 13 21:45 x_20151201.csv

% cat file2 
x_20151201.csv

第一個問題: 閱讀最後一行的最後一項是否更有吸引力?你會使用 cut 和 sed 嗎?這是一個 sftp 目錄列表的重定向。

第二個問題: 無論 file2 中的內容是什麼,我都希望從 sftp 批處理文件中讀取它以獲取該確切文件。

% cat fetch.sh 
#!/bin/sh

cd u/aaa
!sh read.sh
!< file2 
get
bye

可以想像,sftp 不喜歡get在沒有任何文件的情況下提供,那麼我如何讀取 file2 以從 sftp 伺服器獲取該文件?

% sftp -b fetch.sh user@pulse
   sftp> #!/bin/sh
   sftp> 
   sftp> cd u/aaa        
   sftp> !sh read.sh
   sftp> #!/bin/sh
   sftp> !< file2 
   x_20151201.csv
   sftp> get
   You must specify at least one path after a get command.

您可以在一個命令中組合所有操作:

sftp user@host:/path/to/file/$(tail -1 file1.txt |tr -s ' ' |cut -d ' ' -f 9)

這會將文件提取到目前工作目錄中。如果您需要將文件提取到另一個目錄,請指定目標目錄作為 sftp 命令的下一個參數。

引用自:https://unix.stackexchange.com/questions/203556