Inicio

Guiones (scripts) para renombrar ficheros y modificar sus permisos

Cuando recibimos ficheros puede que tengan nombres con espacios, permisos inadecuados, mayúsculas, eñes, acentos. etc. A mi particularmente me gustan los nombres sin espacios, todo en minúsculas y con permisos 755 (rwxr-xr-x) para los directorios y 644 (rw-r--r--) para los ficheros. Los siguientes guiones resuelven el problema pues funcionan recursivamente. Son el resultado de codeguntar en los foros, de una noticia de bulma y de leer los man. Se pueden poner en /usr/local/bin y darles permiso de ejecución (755). No obstante ten cuidado y no los uses a lo loco porque al cambiar el nombre a un fichero, puede que sea el enlace de una página html, o puede que le quites los permisos de ejecución a un programa, etc. Imagínate si estás como root y ejecutas permisos en /bin. No podrías volver a ejecutar chmod, puesto que le habrías quitado el permiso de ejecución.

Estos guiones  y los de la página Trucos, todos juntos (2,6 Kib).

Permisos

# Cambiamos recursivamente los permisos de los directorios a 755 y de los ficheros a 644

#!/bin/bash

find -type d -exec chmod 755 "{}" \+
find -type f -exec chmod 644 "{}" \+

Espacios

# Renombramos recursivamente los espacios de los archivos a guion bajo

#!/bin/bash

find . -name '* *' | sort | while read FILE

do
NEWFILE=`echo ${FILE} | sed 's/ /_/g'`
mv "${FILE}" ${NEWFILE}
echo ${NEWFILE}
done

Minúsculas

# Cambiamos recursivamente de mayusculas a minusculas

#!/bin/bash

find -exec rename 'tr/A-Z/a-z/' "{}" \+

Acentos y eñes


# Cambiamos recursivamente a n, N y a las vocales sin acentuar (en minusculas y mayusculas)

#!/bin/bash

find . -name '*ñ*' | sort | while read FILE
do
NEWFILE=`echo ${FILE} | sed 's/ñ/n/g'`
mv "${FILE}" ${NEWFILE}
done
find . -name '*Ñ*' | sort | while read FILE
do
NEWFILE=`echo ${FILE} | sed 's/Ñ/N/g'`
mv "${FILE}" ${NEWFILE}
done

find . -name '*á*' | sort | while read FILE
do
NEWFILE=`echo ${FILE} | sed 's/á/a/g'`
mv "${FILE}" ${NEWFILE}
done

find . -name '*Á*' | sort | while read FILE
do
NEWFILE=`echo ${FILE} | sed 's/Á/A/g'`
mv "${FILE}" ${NEWFILE}
done

find . -name '*é*' | sort | while read FILE
do
NEWFILE=`echo ${FILE} | sed 's/é/e/g'`
mv "${FILE}" ${NEWFILE}
done

find . -name '*É*' | sort | while read FILE
do
NEWFILE=`echo ${FILE} | sed 's/É/E/g'`
mv "${FILE}" ${NEWFILE}
done

find . -name '*í*' | sort | while read FILE
do
NEWFILE=`echo ${FILE} | sed 's/í/i/g'`
mv "${FILE}" ${NEWFILE}
done

find . -name '*Í*' | sort | while read FILE
do
NEWFILE=`echo ${FILE} | sed 's/Í/I/g'`
mv "${FILE}" ${NEWFILE}
done

find . -name '*ó*' | sort | while read FILE
do
NEWFILE=`echo ${FILE} | sed 's/ó/o/g'`
mv "${FILE}" ${NEWFILE}
done

find . -name '*Ó*' | sort | while read FILE
do
NEWFILE=`echo ${FILE} | sed 's/Ó/O/g'`
mv "${FILE}" ${NEWFILE}
done

find . -name '*ú*' | sort | while read FILE
do
NEWFILE=`echo ${FILE} | sed 's/ú/u/g'`
mv "${FILE}" ${NEWFILE}
done

find . -name '*Ú*' | sort | while read FILE
do
NEWFILE=`echo ${FILE} | sed 's/Ú/U/g'`
mv "${FILE}" ${NEWFILE}
done

Reducir calidad de las fotos

#!/bin/bash
#el script recibe la calidad como un argumento
if [ $# -lt 1 ]; then
echo "Necesitas pasar la calidad, por ejemplo:
$reducir_calidad 60."
exit 1
fi
find . -name '*.jpg' -exec convert "{}" -quality $1 "{}" \+


# el punto significa que busca en el directorio actual y recursivamente.
# el nombre esta entre comillas sencillas para que lo interprete bien
# {} es el resultado de find y las comillas son para que no expanda los nombres
# $1 es el unico argumento que recibe el script
# \; es una secuencia de escape para que find sepa dónde acaba el comando. Con + en vez de ; va más rápido, porque solo llama al comando a ejecutar una vez con todo el resultado de la búsqueda, en vez de llamar una vez por cada resultado. Es casi tan rápido como si pasamos con una tubería la salida de find a xargs:
find -type d | xargs chmod 755
y así nos evitamos los problemas de xargs con los nombres con espacios.

Inicio

Valid XHTML 1.0 Strict