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).
# 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 "{}" \+
# 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
# Cambiamos recursivamente de mayusculas a minusculas
#!/bin/bash
find -exec rename 'tr/A-Z/a-z/' "{}" \+
# 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
#!/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.