我有一项相当棘手的任务(至少对我而言)。
我有一个sftp访问服务器,我只需要获取目录中的最新文件。由于sftp接口非常有限,我首先将目录中的文件列为文本文件。
这是代码
sftp -b - hostname >list.txt <<EOF
ls -l *.xls
EOF
我现在关注的是list.txt,如何识别最新文件?
list.txt的示例内容
cat list.txt
-rw-r--r-- 0 16777221 16777216 52141 Mar 29 08:06 samplefile1.xls
-rw-r--r-- 0 16777221 16777216 2926332 Mar 28 09:48 samplefile2.xls
-rw-r--r-- 0 16777221 16777216 40669 Mar 26 04:38 samplefile3.xls
-rw-r--r-- 0 16777221 16777216 8640 Mar 19 08:02 samplefile4.xls
-rw-r--r-- 0 16777221 16777216 146331 Mar 25 07:27 samplefile5.xls
-rw-r--r-- 0 16777221 16777216 18988 Mar 19 03:53 samplefile6.xls
-rw-r--r-- 0 16777221 16777216 36640 Apr 2 12:52 samplefile7.xls
答案 0 :(得分:0)
使用ls -lt
sftp -b - hostname >list.txt <<EOF
ls -lt
EOF
现在文件中的第一行将是最新文件。
答案 1 :(得分:0)
您可以像下面这样管理它: -
首次手动生成history.txt文件并添加已传输的所有文件。例如samplefile6.xls和samplefile7.xls
sftp -b - hostname >list.txt <<EOF
ls -l *.xls
EOF
现在为上面的现有脚本添加一个while循环
while read line
do
file=$(echo "$line" | awk '{print $9}')
if grep "$file" history.txt; then
echo "File already existed in history file -- No need to transfer"
else
sftp server_host <<EOF
cd /your/dropLocation
put $file
quit
EOF
echo "$file" >> history.txt
#add the transferred file to history file
fi
done < list.txt
使用这种方法,即使您有多个最新文件,也可以非常轻松地传输它们。
希望这会对你有所帮助。