Eliminazione di file dal server FTP remoto più vecchio di x giorni

ho un server FTP remoto where memorizzo alcuni backup tramite cronjob.

Il problema è che ho solo un po 'di spazio in modo che faccio backup incrementali. Voglio mantenere i backup di circa 14 giorni.

  • Procedure per confermare un hack sospetto? (Linux)
  • C'è un'utilità Linux che può distribuire i file su una serie di dischi rigidi, come un bilanciatore di carico, ma per l'archiviazione?
  • Come si crea l'istantanea LVM dopo che il messaggio di errore "non trovato: il dispositivo non è stato eliminato"
  • Qual è la tecnica per scoprire il collo di bottiglia?
  • Come posso percorrere diversi routes su diverse interfacce (routes) per protocollo?
  • Autenticazione di directory Linux + Active + solo consentendo l'accesso a determinati gruppi
  • Non ho altro accesso al server ad exception di FTP e ora non faccio come eliminare i file più vecchi di x giorni. Ogni file ha un nome con una data in esso

    yxzNamezxy-date-ymd.tar.bz2 (datev-20100111.tar.bz2( 

    Spero di avere qualche aiuto qui.

    Acclamazioni e ringraziamenti per le risposte sperate che arrivano,

    Dennis

    / Edit

    Sto cercando di usare la cosa curl che è mantioned in una risposta con questa parte del codice

     curl ftp://$FTP_SERVER --user $FTP_USER:$FTP_PASS --list-only > files.tmp declare -a aFiles let iCount=0 exec < files.tmp while read sLine do aFiles[$iCount]=$sLine ((iCount++)) done echo -e "\n Files: \n\n\n" echo ${aFiles[@]} echo -e "\nfor ...\n\n\n" for sFile in $aFiles do echo -e "\nFile:" $sFile done 

    ma il ciclo secondario non mi dà più di 1 nome file

    Saluti,

    Dennis

    4 Solutions collect form web for “Eliminazione di file dal server FTP remoto più vecchio di x giorni”

    Potresti submit una serie di comandi per lftp e avvolgerlo in uno script di shell che calcola il nome file dei file troppo vecchi (vedere lo script in basso).

     TODAY=$(date --iso) # Today's date like YYYY-MM-DD RMDATE=$(date --iso -d '6 days ago') # TODAY minus X days - too old files FTPUSER=username FTPPW=password # Better load this from an encrypted file FTPSERVER=FQDN_or_IP LFTP=/usr/bin/lftp # Path to binary TMPDIR=$(mktemp -d) # Your archives are here # CAUTION: mput -E deletes local files after upload echo -n "Uploading files via FTP... " $LFTP << EOF open ${FTPUSER}:${FTPPW}@${FTPSERVER} cd backups/${HOSTNAME} mkdir ${TODAY} cd ${TODAY} mput -E ${TMPDIR}/* cd .. rm -rf ${RMDATE} bye EOF echo "Done." 

    Assicurarsi che nessuno eseguire root può leggere questo script o mettere le credenziali altrove. TMPDIR è la directory in cui i backup risiedono localmente. Naturalmente è necessario modificare le parti obivose.

    HTH,
    PERA

    A un alto rischio di essere votato per pubblicare un commento in ritardo su questo thread, ecco un'idea.

    Se non si preoccupano di avere date sui tuoi nomi di file e se si mantiene un piccolo numero di backup gestibile, è ansible utilizzare i nomi di file ordinali, ad esempio backup.1.tgz, backup.2.tgz, backup.3.tgz e presto.

    A causa di questi nomi, è ansible rinominare i backup precedenti prima di caricare un nuovo.

    • rinominare backup.2.tgz backup.3.tgz
    • rinominare backup.1.tgz backup.2.tgz
    • metti backup.1.tgz

    Devi essere in grado di scrivere uno script per:

    • Ottieni l'elenco dei file usando l'opzione --list-only di curl
    • Analizzare l'elenco dei file che si desidera eliminare
    • Utilizzare l'opzione --quote o --request per submit un command rm o DELE con i nomi dei file selezionati

    Edit:

    Il secondo ciclo si riferisce a $aFiles come uno scalare. Devi rivelarlo come un arrays come questo:

     for sFile in ${aFiles[@]} do echo -e "\nFile:" $sFile done 

    Inoltre, non è necessario un file temp. Dovresti essere in grado di curl pipe nel while .

    Ho una situazione simile e vedo che non è ancora pienamente risposto. Capisco che quei 3 proiettili sono le pietre miliari dello script:

    • Ottieni l'elenco dei file usando l'opzione -list-only di curl
    • Analizzare l'elenco dei file che si desidera eliminare
    • Utilizzare l'opzione –quote o –request per submit un command rm o DELE con i nomi dei file selezionati

    e questo è ovvio. Ma possiamo get uno script che li fa?

    I miei file hanno nomi di file contenenti la data e l'ora in cui sono stati generati e sono stati caricati in un server FTP remoto:

    xxx.yyy.z.aaa_01_20160313102903_DUMP01.dmp

    La posizione della data e dell'ora (es. 20160313102903) nel nome del file è statica. Naturalmente i timbri di tempo di tali file sono anche validi.

    Il mio objective è quello di eliminare i file più vecchi di X giorni usando uno script che dovrebbe essere eseguito in cron su una macchina Linux where posso utilizzare solo curl o lftp.

    • Non posso usare alcun altro protocollo tranne ftp per accedere al server FTP (nessun sftp, non ssh)

    • Non posso usare il command di data con "X days ago" né la syntax "–iso" come quella macchina Linux sta eseguendo BusyBox v1.20.2 (2015-01-30 16:18:45 WET) che non comprende la data umana Riferimenti

    • Non posso creare una sottocartella temporanea in quel server FTP

    Ho cercato script che dovrebbero portrmi alla soluzione, ma perché sono linux noob sto avanzando molto lentamente e finora ho trovato solo:

    • Sono in grado di elencare la data di X giorni fa: data -d "@ $ (($ (data +% s) – 86400 * $ XDays))"
    • Sono in grado di elencare tutti i file dal server FTP: curl ftp: // [FTP_IP] / cartella / sottocartella / * –user MyUser @ [FTP_IP]: [MyUserPassword] –list-only "

    Lo script vero è molto gradito.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.