2015-02-03 2 views
1

Мне нужен скрипт, который удаляет старые файлы с FTP-сервера, но ничего не работает. Я протестировал следующий скрипт, который нашел, но когда я запустил, я получаю сообщение об ошибке: «Синтаксическая ошибка в выражении (токен ошибки« 0 + 5 »)».Удалить старые файлы из ftp с помощью сценария оболочки

Кто-нибудь может мне помочь?

#!/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

ответ

0

заменить 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.

+0

Я использовал «if [[$ {lista [$ ((FNO + 5))]} ==" $ MM "]];" и работа! Большое спасибо: D –

+0

Рад, что помогло! если вы нашли, что мой ответ был полезен для вас, вы можете «принять» его, нажав на стрелку, по стрелкам вверх, окружающим число в левом верхнем углу моего ответа. Хороший код, другой для управления удалением ftp. Удачи. – shellter

+0

@JhonatanSilva Я пробовал этот скрипт. Он работает без ошибок, но не удаляет файлы. Не могли бы вы отправить мне мою копию на адрес [email protected]? – Ghayel