我有这个工作:
% 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.
答案1
您可以将所有操作组合到一个命令中:
sftp user@host:/path/to/file/$(tail -1 file1.txt |tr -s ' ' |cut -d ' ' -f 9)
这会将文件提取到当前工作目录中。如果需要将文件提取到另一个目录中,请将目标目录指定为 sftp 命令的下一个参数。