Necesito cambiar el nombre de forma recursiva de todos los archivos y directorios. Convierto espacios a guiones bajos y hago que todos los nombres de archivos/directorios estén en minúsculas. ¿Cómo puedo hacer que la siguiente secuencia de comandos cambie el nombre de todos los archivos en una sola ejecución? Actualmente, la secuencia de comandos debe ejecutarse varias veces antes de que se conviertan todos los archivos/directorios. El código es el siguiente:Perl: cambiar el nombre de todos los archivos y directorios
#!/usr/bin/perl
use File::Find;
$input_file_dir = $ARGV[0];
sub process_file {
$clean_name=lc($_);
$clean_name=~s/\s/_/g;
rename($_,$clean_name);
print "file/dir name: $clean_name\n";
}
find(\&process_file, $input_file_dir);
¿Qué sucede si "Algunos Nombre de archivo" y "nombre_de_archivo" existen en el mismo directorio? Y para directorios no vacíos "Some Dir" y "some_dir" con el mismo padre? –
¿Sabes que Perl viene con un script de cambio de nombre (3)? –
@Pasi: es "prename". Por alguna razón, como de costumbre, Debian decidió cambiar las cosas y cambiarle el nombre para "cambiar el nombre", reemplazando el cambio de nombre original de userlinux. – Juliano