prenombre
Forma más sencilla sería utilizar rename
o prename
, lo que es un script de Perl (si eres un ksh
o mksh
usuario, que Shell ha rename
incorporado en la función, que es diferente, lo que en aras de la coherencia, voy a utilizar prename
cuando se hace referencia a que Perl script; alternativamente, podría llamar /usr/bin/rename
: ruta completa al ejecutable).
$ ls
Session 1/ Session 2/ Session 3/ Session 4/ Session 5/ Session 6/ Session 7/ Session 8/
$ prename 's/Session/Folder/' Session*/
$ ls
Folder 1/ Folder 2/ Folder 3/ Folder 4/ Folder 5/ Folder 6/ Folder 7/ Folder 8/
Si necesita una búsqueda recursiva o se asegura de encontrar el tipo correcto de elemento (tal vez también tenga archivos con la palabra "Sesión" en el nombre del archivo) puede combinarlo con la find
utilidad:
$ ls
Folder 1/ Folder 2/ Folder 3/ Folder 4/ Folder 5/ Folder 6/ Folder 7/ Folder 8/
$ find -maxdepth 1 -type d -name "Session *" -exec prename 's/Session/Folder/' {} \;
$ ls
Folder 1/ Folder 2/ Folder 3/ Folder 4/ Folder 5/ Folder 6/ Folder 7/ Folder 8/
Ligeramente largo, quizás un poco redundante, pero funciona.
mv
El pequeño problema mv
es que tenemos que alterar el nombre del destino cada vez, por lo que no puede hacer lo que queremos. Para hacer eso, nos gustaría tener que combinarlo con algunas otras herramientas, tales como find
o bash
herramientas 's.
$ ls
Session 1/ Session 2/ Session 3/ Session 4/ Session 5/ Session 6/ Session 7/ Session 8/
$ for dir in Session*/ ; do mv "${dir}" "Folder ${dir##*\ }" ;done
$ ls
Folder 1/ Folder 2/ Folder 3/ Folder 4/ Folder 5/ Folder 6/ Folder 7/ Folder 8/
Lo que ves aquí es que estamos recorriendo todos los elementos que contienen la palabra Session
en ellos y son directorio. Utilizamos la expansión de parámetros `$ {dir ## * \}" para extraer todo después del espacio en el nombre del directorio (que es el número respectivo), y formar una nueva cadena "Carpeta /".
En ambos prename
comandos y mv
estamos usando globbing, lo que significa que estos enfoques cambiarán el nombre de cada directorio que contenga la palabra "Sesión", incluso "Sesión bla". No es ideal, por supuesto, pero para el caso específico en el que sabe que el nombre de su carpeta es consistente, eso funcionará. Alternativamente, podríamos aumentar el comando con for dir in Session\ [1-9] ; do . . .done
.
En otras palabras, este enfoque puede funcionar, pero es muy simplista y no es el mejor.
Pitón
Por supuesto, también se pueden usar otras herramientas. Por ejemplo, Python:
$ ls
Session 1/ Session 3/ Session 5/ Session 7/
Session 2/ Session 4/ Session 6/ Session 8/
$ python -c 'import os,shutil;map(lambda x:shutil.move(x,x.replace("Session","Folder")),os.listdir("."))'
$ ls
Folder 1/ Folder 2/ Folder 3/ Folder 4/ Folder 5/ Folder 6/ Folder 7/ Folder 8/
prename
yrename
?prename
porque si está utilizando Korn shell o su derivado en lugar debash
, hay un shell incorporado en el comando llamadorename
, por lo que la sintaxis paraprename
no funcionará allí y tendrá que llamar explícitamente/usr/bin/rename
para que funcione.python3 -c 'import os,shutil;list(map(lambda x:shutil.move(x,x.replace("Session","Folder")),os.listdir(".")))'
Vaya a la carpeta que contiene toda la carpeta que desea renombrar y hacer:
fuente