Script para limpiar nombres de carpetas

Script para limpiar nombres de carpetas

Tengo muchas carpetas a las que es necesario cambiarles el nombre según un par de reglas. ejemplo de carpetas:

-- Some.Folder.Name.Today.2009
-- Another.messed.Up.folder.1980
-- Third.messed.Up.folder.1980

Me gustaría ver si alguien tiene un script rápido para cambiar el nombre de cada carpeta para eliminar el punto (.) del nombre de la carpeta y también colocar paréntesis alrededor del año para que se vea así.

-- Some Folder Name Today (2009)
-- Another messed Up folder (1980)
-- Third messed Up folder (1980)

¡Muchas gracias!

Respuesta1

perlamaneja esto bien, algo como esto debería ser suficiente:

use warnings;
use strict;
use File::Copy;

my $oldname;

opendir(my $d, ".") or die $!;
while(readdir $d) {
    if (-d $_ and $_ ne "." and $_ ne "..")
    {
        $oldname = $_;
        $_ =~ s/\./ /g;
        $_ =~ s/(\d{4})/($1)/g;
        move($oldname,$_);
    }
    }
closedir $d;

Solo probado brevemente, ¡siéntete libre de jugar/modificarlo! No es perfecto de ninguna manera. Lo piratearon juntos rápidamente;)

Nota:En su estado actual, debe ejecutarse desde dentro del directorio con los nombres de las carpetas alteradas.

C:\Users\John\Desktop\carpetas>dir
 El volumen en la unidad C no tiene etiqueta.
 El número de serie del volumen es 8888-1666

 Directorio de carpetas C:\Users\John\Desktop\

29/01/2011 19:14 .
29/01/2011 19:14 ..
29/01/2011 19:07 algún.nombre.de.carpeta.2008
29/01/2011 19:07 algún.nombre.de.carpeta.2009
29/01/2011 19:16 282 ren.pl
               1 archivo(s) 282 bytes
               4 Dir(s) 53.349.425.152 bytes libres

C:\Usuarios\John\Escritorio\carpetas>ren.pl

C:\Users\John\Desktop\carpetas>dir
 El volumen en la unidad C no tiene etiqueta.
 El número de serie del volumen es 8888-1666

 Directorio de carpetas C:\Users\John\Desktop\

29/01/2011 19:16 .
29/01/2011 19:16 ..
29/01/2011 19:07 algún nombre de carpeta (2008)
29/01/2011 19:07 algún nombre de carpeta (2009)
29/01/2011 19:16 282 ren.pl
               1 archivo(s) 282 bytes
               4 Dir(s) 53.349.425.152 bytes libres

Respuesta2

Sugeriría ejecutar los nombres de archivos a través de un script sed corto. for file in dir/with/files/*; do name=$(basename "$file" | sed 's/\./ /g;s/\([12][09][0-9][0-9]\)/(\1)/'); mv "$file" "$(dirname \"$file\")/$name"; done. Reemplaza los puntos con espacios y luego rodea el año entre paréntesis.

Asegúrese de que, si está escaneando/operando con estos archivos, estén citados correctamente. Los espacios se utilizan a menudo como delimitadores entre elementos.

Respuesta3

EnPotencia Shell(que creo que está instalado de forma predeterminada en Win7, aunque no tengo una máquina con Windows, por lo que podría estar equivocado),

gci *.* | %{
 mi $_ ($_.name.replace('.', ' ').insert($_.name.lastindexof('.')+1, '(')+')')
}

información relacionada