Sorbos de zen

20090108

Cómo hacer una modificación a varios ficheros a la vez

Por ejemplo, si tienes en un fichero de texto una lista de ficheros a borrar de un repositorio Subversion, entre otros a mantener, esta orden irá recorriendo el fichero línea a línea, eliminando las rutas que contiene:

while read line; do svn del $line; done < lista.txt

Para modificar un URL, dirección de correo, etc en varios ficheros a la vez, esta orden busca y reemplaza «antigua» por «nueva» en todos los ficheros de la extensión indicada (más detalles):

perl -pi -e 's/antigua/nueva/' *.extensión


Cambios de nombre

Como es sabido, para cambiar la codificación del contenido de los ficheros se usa la orden iconv. También se puede cambiar la codificación de los nombres de fichero, por ejemplo de los procedentes de Windows:

for i in *JPG; do convmv --notest -f cp1252 -t UTF-8 "$i"; done


Para convertir los espacios de los nombres de fichero a guiones bajos (subrayados o underscores):

find . -type f -iname "*.JPG" -exec rename "s/ /_/g" {} \;


Para eliminar un prefijo de los nombres de fichero (por ejemplo, si todos empiezan por «Chuggington - » (habría que mirar como hacerlo también en bash):
ksh
for f in *; do mv "$f" "${f#Chuggington\ -\ }"; done