shell - 用于从 ftp 中删除旧文件的 Linux shell 脚本

标签 shell ftp

有一个问题 - 需要在 FTP 上存储数据库备份。在 FTP 上备份不应超过 10 个,即添加备份后 FTP 应删除,最旧的文件使文件总数不能超过 10 个。
我们怎样才能从 ftp 中实现这样的删除?
我正在尝试编写脚本,但不起作用删除:

x=1
ftp -vn $FTP_SERVER<<!
user $FTP_LOGIN $FTP_PASSWORD
binary
put $DUMP_FILE_NAME

for i in `ls -t` do
    if [ $x -le $keep ] then
        ((x++))
        continue
    fi
    delete $i
done

bye
EOF
</i>

最佳答案

这是我编写的脚本,用于删除远程 ftp 站点上超过 7 天的任何文件。它的工作原理是检索目录列表,解析修改日期,然后重新连接以删除任何早于 nday 的文件。

我怀疑硬编码到循环中的数字(元素日期)可能会根据您的系统设置而改变。 ls 命令的返回格式取决于本地系统设置。

假设您的备份是每天,那么将 ndays 设置为 10 可能会解决您的问题。

#!/bin/bash
# get a list of files and dates from ftp and remove files older than ndays
ftpsite="ftp.yourserver.com"
ftpuser="loginusername"
ftppass="password"
putdir="/public_ftp/admin/logs"

ndays=7


# work out our cutoff date
MM=`date --date="$ndays days ago" +%b`
DD=`date --date="$ndays days ago" +%d`


echo removing files older than $MM $DD

# get directory listing from remote source
listing=`ftp -i -n $ftpsite <<EOMYF 
user $ftpuser $ftppass
binary
cd $putdir
ls
quit
EOMYF
`
lista=( $listing )

# loop over our files
for ((FNO=0; FNO<${#lista[@]}; FNO+=9));do
  # month (element 5), day (element 6) and filename (element 8)
  #echo Date ${lista[`expr $FNO+5`]} ${lista[`expr $FNO+6`]}          File: ${lista[`expr $FNO+8`]}

  # check the date stamp
  if [ ${lista[`expr $FNO+5`]}=$MM ];
  then
    if [[ ${lista[`expr $FNO+6`]} -lt $DD ]];
    then
      # Remove this file
      echo "Removing ${lista[`expr $FNO+8`]}"
      ftp -i -n $ftpsite <<EOMYF2 
      user $ftpuser $ftppass
      binary
      cd $putdir
      delete ${lista[`expr $FNO+8`]}
      quit
EOMYF2


    fi
  fi
done

关于shell - 用于从 ftp 中删除旧文件的 Linux shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11203988/

相关文章:

ruby FTP被动模式错误

c# - 重新连接后继续 FTP 下载

在 awk 中调用将记录作为参数的 c 代码

用于了解文件系统是否已挂载的 Shell 脚本

bash - 同一行的 echo 输出

c# - 在 MVC/C# 中创建 CSV 文件并通过 FTP 上传到服务器

java - Spring Integration从动态多个目录读取文件

在 Windows 上使用 gitbash shell 的 ruby​​ irb - 不能使用箭头键修改命令输入?

linux - 如何警告在 KornShell 脚本中使用未设置的变量。

java - Spring Integration DefaultFtpSessionFactory 超时参数详细信息