使用 shell 脚本从 ftp 中删除旧文件
Delete old files from ftp using shell script
我想要一个从 FTP 服务器删除旧文件的脚本,但没有任何效果。
我测试了我发现的以下脚本,但是当我 运行 时,我收到错误:"syntax error in expression (error token is "0+5")".
有人可以帮助我吗?
#!/bin/bash
# get a list of files and dates from ftp and remove files older than ndays
ftpsite="HOSTNAME"
ftpuser="USERNAME"
ftppass="PASSWORD"
putdir="FOLDER"
#age of files they should delete
ndays=1
# 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
将 expr $FNO+5
替换为 expr $FNO + 5
,将 expr $FNO+6
替换为 expr $FNO + 6
或
您可以使用更新的 bash|ksh|zsh
功能,例如
if [[ ${lista[$((FNO+5))]} == "$MM" ]]; then
经过非常简单的测试。请注意,计算结果为 "3" == "03"
的内容将为假。
$(( math cmd sub cmds ))
构造可以使用大多数 C 语言数学运算符,如 ++
(以及许多其他我不常使用的运算符,因此 man bash|ksh|zsh
以获取详细信息。)。
请注意,您不需要使用 $FNO
,但普通的 FNO
将被计算为 $FNO
。
当然,您还需要修复 $FNO+6
和 $FNO+8
。
IHTH.
我想要一个从 FTP 服务器删除旧文件的脚本,但没有任何效果。 我测试了我发现的以下脚本,但是当我 运行 时,我收到错误:"syntax error in expression (error token is "0+5")".
有人可以帮助我吗?
#!/bin/bash
# get a list of files and dates from ftp and remove files older than ndays
ftpsite="HOSTNAME"
ftpuser="USERNAME"
ftppass="PASSWORD"
putdir="FOLDER"
#age of files they should delete
ndays=1
# 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
将 expr $FNO+5
替换为 expr $FNO + 5
,将 expr $FNO+6
替换为 expr $FNO + 6
或
您可以使用更新的 bash|ksh|zsh
功能,例如
if [[ ${lista[$((FNO+5))]} == "$MM" ]]; then
经过非常简单的测试。请注意,计算结果为 "3" == "03"
的内容将为假。
$(( math cmd sub cmds ))
构造可以使用大多数 C 语言数学运算符,如 ++
(以及许多其他我不常使用的运算符,因此 man bash|ksh|zsh
以获取详细信息。)。
请注意,您不需要使用 $FNO
,但普通的 FNO
将被计算为 $FNO
。
当然,您还需要修复 $FNO+6
和 $FNO+8
。
IHTH.