gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 05:55:10 27 4
gpt4 key购买 nike

有一个问题 - 需要在 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com