Avatar billede shako Novice
02. juni 2014 - 09:30 Der er 3 kommentarer og
1 løsning

FTP Sortering

Hvordan skulle man foretage sig en sortering af filer på en FTP server, baseret på filnavn?

Jeg har et system som uploader en masse filer til en FTP, og jeg vil gerne køre et program som sorterer og smider i nogle bestemte mapper alt efter om filnavnet starter med et bestemt tal.

Nogle idéer? Jeg har erfaring i PHP, C#, C++, Java og lidt Python
Avatar billede moddi100 Seniormester
02. juni 2014 - 10:23 #1
Alt efter om det er din egen server eller ej, er der flere tilgange.

Jeg ville personligt opsætte et cronjob f.eks. med www.cronjob.de som med faste intervaller kørte et PHP-script som klarede det.

En implementation i PHP kræver i hvert fald ikke det store arbejde.
Avatar billede arne_v Ekspert
03. juni 2014 - 02:23 #2
Java med Apache Commons Net:

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;

public class FtpRenamer {
    public static void rename(String server, String un, String pw, String dir, List<FileHandler> actions) throws IOException {
        FTPClient cli = new FTPClient();
        cli.connect(server);
        cli.login(un,  pw);
        cli.changeWorkingDirectory(dir);
        for(FTPFile f : cli.listFiles()) {
            for(FileHandler action: actions) {
                if(action.match(f)) {
                    action.process(f, cli);
                }
            }
        }
        cli.logout();
    }
    public static void main(String[] args) throws IOException {
        List<FileHandler> actions = new ArrayList<FileHandler>();
        actions.add(new PrintAllFilenames());
        actions.add(new RenameFilesWithPrefix("z", "zzz/")); // <---- separator must be specified at end of toDir value
        rename("myserver", "myusername", "mypassword", "somedir", actions);
    }
}

interface FileHandler {
    public boolean match(FTPFile f);
    public void process(FTPFile f, FTPClient cli) throws IOException;
}

class PrintAllFilenames implements FileHandler {
    public boolean match(FTPFile f) {
        return true;
    }
    public void process(FTPFile f, FTPClient cli) {
        System.out.println(f.getName());
    }
}

class RenameFilesWithPrefix implements FileHandler {
    private String prefix;
    private String toDir;
    public RenameFilesWithPrefix(String prefix, String toDir) {
        this.prefix = prefix;
        this.toDir = toDir;
    }
    public boolean match(FTPFile f) {
        return f.getName().startsWith(prefix);
    }
    public void process(FTPFile f, FTPClient cli) throws IOException {
        cli.rename(f.getName(), toDir + f.getName());
    }
}
Avatar billede shako Novice
30. juni 2014 - 09:42 #3
Lig et svar Arne_v så får du point
Avatar billede arne_v Ekspert
30. juni 2014 - 15:04 #4
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester