/*******************************************************************************************
* Author: Kevin Osborne
* This java app aims to delete non-empty directories from an FTP server that are older than
* 45 days, the 45 can be changed to whatever. I believe it's recursive, but I've only tried
* with 3 levels deep, so I can't guarantee anything beyond that, but it worked for my needs
* and hopefully it will for yours, too.
*
* It uses ftp4j, which I found to be incredibly simple to use, though limited in some ways.
* feel free to use it, I hope it helps. ftp4j can be downloaded as a jar file here:
* http://www.sauronsoftware.it/projects/ftp4j/ just include it in your IDE.
*******************************************************************************************/
package siabackupmanager;
import java.util.Calendar.*;
import java.util.*;
import it.sauronsoftware.ftp4j.*;
public class SIABackupManager {
// @SuppressWarnings("static-access")
public static void main(String[] args) {
if (args.length != 3) {
System.out.println("Usage: java -jar SIABackupManager.jar HOST USERNAME PASSWORD");
System.exit(0);
}
try {
FTPClient client = new FTPClient();
String hostname = args[0];
String username = args[1];
String password = args[2];
client.connect(hostname);
client.login(username, password);
FTPFile[] fileArray = client.list();
for (int i = 0; i < fileArray.length; i++) {
FTPFile file = fileArray[i];
if (file.getType() == FTPFile.TYPE_DIRECTORY) {
java.util.Date modifiedDate = file.getModifiedDate();
Date purgeDate = new Date();
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -45);
purgeDate = cal.getTime();
if (modifiedDate.before(purgeDate)) {
String dirName = file.getName();
deleteDir(client, dirName);
client.changeDirectoryUp();
client.deleteDirectory(dirName);
}
}
}
} catch(Exception ex) { System.out.println("FTP error: " + ex.getMessage()); }
}
public static void deleteDir(FTPClient client, String dir) {
try {
client.changeDirectory(dir);
FTPFile[] fileArray = client.list();
for (int i = 0; i < fileArray.length; i++) {
FTPFile file = fileArray[i];
if (file.getType() == FTPFile.TYPE_FILE) {
String fileName = file.getName();
client.deleteFile(fileName);
}
}
for (int i = 0; i < fileArray.length; i++) {
FTPFile file = fileArray[i];
if (file.getType() == FTPFile.TYPE_DIRECTORY) {
String dirName = file.getName();
deleteDir(client, dirName);
client.changeDirectoryUp();
String currentDir = client.currentDirectory();
client.deleteDirectory(dirName);
}
}
} catch (Exception ex) { System.out.println("deleteDir error: " + ex.getMessage()); }
}
}
Je suggère fortement d'ajouter la date de la sauvegarde au nom du fichier de sauvegarde, en particulier si le serveur FTP est hébergé par un tiers. Si quelque chose gâche les temps de fichier, vous risquez de supprimer accidentellement les mauvais fichiers. –
Je fais! C'est un nom de fichier typique - factory-hotcopy-Fri-14-Nov-2008-Rev574.zip. Je calcule également un md5 sur le fichier zip qui est stocké avec lui dans un fichier texte d'accompagnement. –
Si vous pouvez utiliser Python, s'il vous plaît voir [this] (http://stackoverflow.com/questions/2867217/how-to-delete-files-with-a-python-script-from-a-ftp-server-which -are-plus-que-7/3114477 # 3114477) répondre dans une question connexe. – tzot