【问题标题】:FTP delete directories older than X daysFTP 删除超过 X 天的目录
【发布时间】:2015-04-01 04:32:57
【问题描述】:

我正在基于这个创建一个脚本。但是当我在结果上运行它时,如果月份不一样,它会删除比日期更新的文件。

Linux shell script for delete old files from ftp

“删除 02-02-2015”这是我今天创建的备份

#!/bin/bash
# get a list of directories and dates from ftp and remove directories older than ndays
ftpsite="hostname"
ftpuser="user"
ftppass="pass"
putdir="/full"

ndays=15


# 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 -p $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 -p $ftpsite <<EOMYF2
      user $ftpuser $ftppass
      binary
      cd $putdir
      mdelete ${lista[`expr $FNO+8`]}/*
      rmdir ${lista[`expr $FNO+8`]}
      quit
      EOMYF2
   fi
  fi
done

结果 => 删除早于 1 月 18 日的文件 删除 02-02-2015

【问题讨论】:

    标签: bash ftp


    【解决方案1】:

    这行似乎是错误的,因为它总是正确的:

    if [ ${lista[`expr $FNO+5`]}=$MM ];
    

    您应该在“=”周围写空格。正确的形式是:

    if [ ${lista[`expr $FNO+5`]} = $MM ];
    

    [ ] 是 bash 内置的,它的参数将传递给“test”命令。 [ asd = "$qwe" ] 相当于:test "asd" "=" "$qwe"

    【讨论】:

    • 谢谢你,我也通过if [ "${lista[expr $FNO+5]}" = "$MM" ]; 得到了结果,我会投票给你的答案,但没有任何声誉:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多