从文件列表中识别最新文件

时间:2018-04-03 07:11:29

标签: linux shell unix sftp

我有一项相当棘手的任务(至少对我而言)。

我有一个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

2 个答案:

答案 0 :(得分:0)

使用ls -lt

sftp -b - hostname >list.txt <<EOF
ls -lt
EOF

现在文件中的第一行将是最新文件。

答案 1 :(得分:0)

您可以像下面这样管理它: -

  1. 维护服务器中的历史文件,例如history.txt
  2. 在传输文件之前,请创建您当前正在创建的文件列表。
  3. 首次手动生成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
    

    使用这种方法,即使您有多个最新文件,也可以非常轻松地传输它们。

    希望这会对你有所帮助。