A idéia surgiu devido o aparelho de som do carro do meu pai não ser lá um iPod Shuffle. Então pensei:

Já que ele não randomiza muito bem, que tal levar os nomes dos arquivos já randomizados?

Decidi fazer rapidinho em Java e deu nisso aí:

RandomFiles.java

/*
 *  RandomFiles.java
 *  Copyright (C) 2009  Vítor Avelino
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

import java.io.File;
import java.util.Random;

public class RandomFiles {

    private static Random randomizer = new Random();

    /**
    * Randomize the files of a specific directory.
    *
    * @param directory 	The directory that will have its file renamed
    * @param subdir	<code>true</code> if subdirectories' files have to be renamed
    * 			<code>false</code> if it's not necessary rename subdirectories' files
    */
    public static void randomize(String directory, boolean includeSubdirs) {
        File dir = new File(directory);
        if (!dir.isDirectory() || !dir.exists()) {
            System.err.println(directory + " não é um diretório ou não existe!");
            System.exit(-1);
        }

        System.out.println("Inicializando renomeamento randômico...");
        navigateInDirectories(dir, includeSubdirs);
        System.out.println("Finalizado!");
    }

    private static void navigateInDirectories(File dir, boolean includeSubdirs) {
        File renamed = null;
        int randomNumber = 0;

        for (File f : dir.listFiles()) {
            do {
                randomNumber = randomizer.nextInt();
            } while (randomNumber <= 0);

            if (!f.isDirectory()) {
                renamed = new File(FileUtil.getPath(f) + randomNumber + FileUtil.getExtension(f));
                f.renameTo(renamed);
                System.out.println(">>> " + f.getName() + " renomeado para " + randomNumber + FileUtil.getExtension(f));
            } else if (includeSubdirs) {
                System.out.println("- " + f.getName() + File.separator);
                navigateInDirectories(f, includeSubdirs);
            }
        }
    }

}

FileUtil.java

/*
 *  FileUtil.java
 *  Copyright (C) 2009  Vítor Avelino
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

import java.io.File;

public class FileUtil {

    /**
    * Returns just the pathname of a file as string.
    *
    * @param f The file that will have the path extracted
    * @return The pathname of a file
    */
    public static String getPath(File f) {
        String absolutePath = f.getAbsolutePath();
        return absolutePath.substring(0, absolutePath.lastIndexOf(File.separator) + 1);
    }

    /**
    * Returns the extension of a file.
    *
    * @param The file that will have the extension extracted
    * @return <code>null</code> if the extension of a file doesn't exist, <code>extension</code> if the file has one
    */
    public static String getExtension(File f) {
        String name = f.getName();
        return name.substring(name.lastIndexOf('.'));
    }

}

A forma de utilizar é simples, segue um exemplo abaixo:

RandomFiles.randomize("D:\Teste\", false);
RandomFiles.randomize("D:\Teste\", true);

Para a primeira chamada a saída será:

Inicializando renomeamento randômico…
>>> arquivo1.PDF renomeado para 538981388.PDF
>>> arquivo2.doc renomeado para 65861820.doc
>>> arquivo3.html renomeado para 210904720.html
Finalizado!

Para a segunda chamada a saída será:

Inicializando renomeamento randômico…
>>> 210904720.html renomeado para 668609286.html
>>> 538981388.PDF renomeado para 573146098.PDF
>>> 65861820.doc renomeado para 417987190.doc
- sub\
>>> arquivo4.PDF renomeado para 233716363.PDF
>>> arquivo5.doc renomeado para 657621617.doc
>>> arquivo6.html renomeado para 118165004.html
Finalizado!

As mensagens de saída foram utilizadas apenas para acompanhar a execução do programa.

Espero que seja útil para alguém assim como foi para mim. Quando tiver tempo farei uma versão em Python e/ou Shell-Script e também instalarei um SO decente (viram o exemplo lixo, né?) aqui no PC da casa dos meus pais.

Férias já! :~

import java.io.File;
import java.util.Random;public class RandomFiles {private static Random randomizer = new Random();public static void randomize(String directory, boolean includeSubdirs) {
File dir = new File(directory);
if (!dir.isDirectory() || !dir.exists()) {
System.err.println(directory + ” não é um diretório ou não existe!”);
System.exit(-1);
}

System.out.println(“Inicializando renomeamento randômico…”);
navigateInDirectories(dir, includeSubdirs);
System.out.println(“Finalizado!”);
}

private static void navigateInDirectories(File dir, boolean includeSubdirs) {
File renamed = null;
int randomNumber = 0;

for (File f : dir.listFiles()) {
do {
randomNumber = randomizer.nextInt();
} while (randomNumber <= 0);

if (!f.isDirectory()) {
renamed = new File(FileUtil.getPath(f) + randomNumber + FileUtil.getExtension(f));
f.renameTo(renamed);
System.out.println(“>>> ” + f.getName() + ” renomeado para ” + randomNumber + FileUtil.getExtension(f));
} else if (includeSubdirs) {
System.out.println(“- ” + f.getName() + File.separator);
navigateInDirectories(f, includeSubdirs);
}
}
}

public static void main(String[] args) {
RandomFiles.randomize(“D:/teste/”, false);
}

}

Compartilhe:

  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • DZone
  • FriendFeed
  • Identi.ca
  • LinkedIn
  • Netvibes
  • Rec6
  • Reddit
  • RSS
  • StumbleUpon
  • Twitter
  • Mixx
  • Technorati

Artigos relacionados: