Mein Videoplayer auf meinem Fernseher hat seine Art zu vorbeizugehen
von einer Datei zur anderen beim fortlaufenden Lesen
und sein Wiedergabemodus besteht darin, von 1…​..mp4 zu 10…​.mp4 zu wechseln,
und nicht von 1…​mp4 bis 2…​.mp4.
Das Problem ist, dass es fast 900 Dateien und Ordner gibt.
Bingo, ein super Anwendungsfall von Groovy zum Manipulieren
Dateien, Umbenennung, Suche nach einem Muster im Dateinamen
oder Ordner.
Hier ist das Ziel, die Namen zu ändern, die mit
eine Zahl und dessen zweites Zeichen des Namens
Ist keine Zahl, ich werde diesem Namen eine 0 am Anfang hinzufügen

renameFilesToStartWithTwoDigit.groovy

#!/usr/bin/env groovy
/**
 * get a crossplateform separator
 * @return
 */
static String getSeparator() {
    System.getProperty("file.separator")
}
/**
 * rename file
 * @param file
 * @param newName
 * @return the renamed file
 */
static File rename(File file, String newName) {
    assert file.renameTo(file
            .parentFile.path +
            getSeparator() +
            newName)
    new File(file
            .parentFile.path +
            getSeparator() +
            newName)
}

String rootFolderPath = System.getProperty("user.home") +
        "/Bureau/ng-courses/Udemy - Angular 7 " +
        "(formerly Angular 2) - The Complete Guide"

File rootFolder = new File(rootFolderPath)
assert rootFolder.exists()
assert rootFolder.directory
assert rootFolder.canRead()

List<File> dirList = new ArrayList<>()

//Adding rootFolder in dirList
// just in case there is some files in it
dirList.add(rootFolder)

//looping to get list of directories
//recursively inside rootFolder
rootFolder.traverse { File file ->
    !file.directory ?: dirList.add(file)
}

//looping through dirList
//to rename directories filling criterias
for (int i = dirList.size() - 1; i >= 0; i--) {
    Character[] chars = dirList.get(i).name.chars
    !(chars[0].digit && !chars[1].digit) ?:
            dirList.set(i, rename(dirList.get(i),
                    "0${dirList.get(i).name}"))
    if (dirList.get(i).directory) {
        //looping through directory
        //to rename file filling criterias
        dirList.get(i).listFiles().each { File f ->
            Character[] cs = f.name.chars
            !(cs[0].digit && !cs[1].digit) ?:
                    rename(f, "0${f.name}")
        }
    }
}

Verwandte Artikel