Imaginemos el siguiente escenario:

Tu sitio web hecho en WordPress está completamente muerto, la única forma de recuperarlo es restaurando los backups que teníamos previamente guardados, pero al llegar a ellos nos damos cuenta de que pesa 50gb en imágenes y subirlo al servidor de nuevo por ftp será una tarea eterna usando una pobre conexión de 1mb de subida.

Bien, pues ese caso me ha ocurrido a mi este fin de semana, para un cliente tenía la necesidad de resubir toda esa información, como muchos saben, WordPress maneja un sistema de thumbnails y dependiendo del tema que se use puede o no tener muchas «copias» en pequeño de la misma imagen, en esta ocasión, habían como 7 thumbnails por imagen, lo que hacía que al final el peso se elevara considerablemente, sin contar que eran miles de archivos. Usando una conexión FTP se necesita 1 comando por archivo para subir al servidor y sólo al ejecutar ese comando ya se despierdicia tiempo valioso.

Mi segunda opción fue borrar todas las copias y dejar únicamente las originales, para después estando las imágenes originales en el servidor usar el plugin «Regenerate Thumbnails» y así todas esas copias en pequeño sean creadas directamente por el servidor.

Tenía aquí solo una opción para realizarlo, que era subir únicamente las originales, pero es que eran muchas carpetas y muchas imágenes por carpeta, por lo que estar seleccionando 1 a 1 las imágenes originales igual me llevaría mucho tiempo.

Es por eso que decidí automatizar la tarea, pensé «¿Porqué no hacerlo? al final es ese nuestro trabajo, automatizar tareas», así que dicho y hecho hice un rápido programa que me permita separar las imágenes originales de los thumbnails, para así tener aparte las originales que subiría.

Pues bien, aquí está el programa, hecho en java:

package depurator;

import java.io.File;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 *
 * @author Mxrck
 */
public class Depurator {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        String mainFolder = "D:\\Desktop\\Unpure\\";
        String depuratedFolder = "D:\\Desktop\\Depurated\\";
        String patternString = "(.*?)-[0-9]+x[0-9]+\\..+";
        File folder = new File(mainFolder);
        if (folder.isDirectory()) {
            File[] files = folder.listFiles();
            int filesInside = files.length;
            for (int i = 0; i < files.length; i++) {
                int percent = ((i + 1) * 100) / filesInside;
                System.out.println("Completed: "+percent+"%\tcurrent File: "+files[i].getName());
                Pattern pattern = Pattern.compile(patternString);
                Matcher matcher = pattern.matcher(files[i].getName());
                if (matcher.find()) {
                    //files[i].deleteOnExit();
                    continue;
                }
                files[i].renameTo(new File(depuratedFolder+files[i].getName()));
            }
        }
    }
    
}

Solo es cuestión de cambiar los String «mainFolder» (donde se encuentran todas las imágenes combinadas), y «depuratedFolder» (donde se guardarán únicamente las imágenes originales).

Hay que tener en cuenta que no explora subcarpetas, por lo que se tiene que ejecutar el programa para cada carpeta con imágenes que tengan de su WordPress, igual pueden hacer unas pequeñas modificiaciones para que el programa se encargue automáticamente, no sería muy difícil, pero como tenía prisa por hacerlo en ese momento solo lo hice así.

Ya teniendo sus imágenes originales separadas es cuestión de subirlas al servidor, otra opción sería comprimir todas esas imágenes para que sea un único archivo y descomprimirlo del lado del servidor (si no tiene acceso SSH pueden usar el administrador de archivos que tiene por defecto CPanel).

Decir que de pesar casi 1gb cada carpeta de imágenes, me quedarón de apróximadamente en 300mb, lo que me ahorró muchísimo tiempo de subida.