No los he probado, así que puse echo
al frente de los comandos para que pueda probarlos antes de eliminar el eco para ejecutarlos de verdad.
for f in *v9.zip; do echo mv "${f}" "${f%v9.zip}.zip"; done
for f in *_*; do echo mv "${f}" "${f//_/-}"; done
En cuanto a su tercer problema, estoy seguro de que también se puede hacer, pero tal vez ayude un enfoque más sofisticado que las frases simples sin procesar, como mencionó @tchrist.
Hay un rename
Comando proporcionado con la mayoría de las distribuciones basadas en Debian/Ubuntu que fue escrito por Robin Barker basado en el código original de Larry Wall de alrededor de 1998 (!).
Aquí hay un extracto de la documentación:
"rename" renames the filenames supplied according to the rule specified as the first argument. The perlexpr argument is a Perl expression which is expected to modify the $_ string in Perl for at least some of the filenames specified. If a given filename is not modified by the expression, it will not be renamed. If no filenames are given on the command line, filenames will be read via standard input. For example, to rename all files matching "*.bak" to strip the extension, you might say rename 's/\.bak$//' *.bak To translate uppercase names to lower, you'd use rename 'y/A-Z/a-z/' *
Utiliza perl para que pueda usar expresiones de perl para que coincida con el patrón, de hecho, creo que funciona de manera muy similar a los scripts de tchrist.
Otro conjunto de herramientas realmente útil para cambiar el nombre de archivos en masa es la colección renameutils de Oskar Liljeblad. El código fuente está alojado por la Free Software Foundation. Además, muchas distribuciones (especialmente las basadas en Debian/Ubuntu) tienen un renameutils
paquete con estas herramientas.
En una de esas distribuciones puedes instalarlo con:
$ sudo apt-get install renameutils
Y luego, para cambiar el nombre de los archivos, simplemente ejecute este comando:
$ qmv
Se abrirá un editor de texto con la lista de archivos y podrá manipularlos con la función de búsqueda y reemplazo de su editor.
Mi solución favorita es mi propio renombrar guion. El ejemplo más simple que se relaciona con sus problemas son estos:
% rename 's/_/-/g' *
% rename 's/(\p{Lower})(\p{Upper})/$1 $2/g' *
Aunque realmente odio los espacios en blanco en mis nombres de archivo, especialmente los espacios en blanco verticales:
% rename 's/\s//g' *
% rename 's/\v//g' *
etcétera. Está basado en un guión de The Larry Wall, pero ampliado con opciones, como en:
usage: /home/tchrist/scripts/rename [-ifqI0vnml] [-F file] perlexpr [files]
-i ask about clobbering existent files
-f force clobbers without inquiring
-q quietly skip clobbers without inquiring
-I ask about all changes
-0 read null-terminated filenames
-v verbosely says what its doing
-V verbosely says what its doing but with newlines between old and new filenames
-n don't really do it
-m to always rename
-l to always symlink
-F path read filelist to change from magic path(s)
Como puede ver, puede cambiar no solo los nombres de los archivos, sino también a dónde apuntan los enlaces simbólicos usando el mismo patrón. No tienes que usar un s///
patrón, aunque a menudo uno lo hace.
Las otras herramientas en ese directorio son principalmente para trabajo Unicode, de las cuales hay algunas muy útiles.