Borrar basura mediante find

El comando GNU/Linux find, uno de los más potentes, además de buscar archivos por patrones u otros criterios, permite hacer cosas con los resultados obtenidos, y si sabéis un poquito de scripting más todavía.
Hoy os voy a explicar una acción sencilla de aplicar, de las que lleva de serie este comando, pero a su vez usadla con cuidado ya que es peligrosa.
Si quisiéramos encontrar todos los archivos Thumbs.db que genera un sistema Windows para las miniaturas (no solo de imágenes, si no de cualquier tipo de archivo), podemos usar este comando:
find . -name "Thumbs.db"
Si lo ejecutáis en un disco de un tera de datos os podéis sorprender.
Si además tenéis curiosidad de saber lo que ocupan todos esos ficheros Thumbs.db, lo podéis averiguar con este pequeño script:
#!/bin/bash #genero fichero temporal find . -name "Thumbs.db" > listado-miniaturas.txt #calculo total ficheros encontrados totalficheros=`cat listado-miniaturas.txt|wc -l` echo -e "\nSe encontraron: $totalficheros archivos de miniaturas" #establezco separador en salto de linea para evitar problemas de espacios en los nombres de archivo IFS=' ' #recorro el fichero quedandome con el tamaño de cada archivo (en bytes) y totalizando while read a do bytes=`ls -l $a|cut -f5 -d" "` #echo $bytes totalbytes=`expr $totalbytes + $bytes` #echo "Parcial $totalbytes" done < listado-miniaturas.txt #muestro totales en B, KB y MB echo -e "\nTotal B=$totalbytes" totalkbytes=`expr $totalbytes / 1024` echo -e "\nTotal KB=$totalkbytes" totalmbytes=`expr $totalkbytes / 1024` echo -e "\nTotal MB=$totalmbytes" #borro el fichero temporal rm listado-miniaturas.txt
Copiadlo a un fichero llamado tamanominis.sh por ejemplo, dejad ese fichero en la raíz de vuestro disco de datos, y como seguramente será NTFS ya que lo tenéis compartido con Windows, posiblemente no podáis darle permisos de ejecución, no pasa nada, salid a la consola y ejecutarlo así:
bash tamanominis.sh

Copiadlo a un fichero llamado tamanominis.sh por ejemplo, dejad ese fichero en la raíz de vuestro disco de datos
Una posible ejecución mostraría algo así:
bash tamamoninis.sh Se encontraron 1478 Total B=119403664 Total KB=116605 Total MB=113
Quizá 113 MB no sea un tamaño importante dadas las capacidades actuales, pero cada archivo ocupa como mínimo el tamaño de la unidad mínima de asignación, cuyo tamaño estándar ronda los 4KiloBytes. Además, en el caso de particiones NTFS, son 1478 entradas ocupadas en la MFT, vuelve a ser una ridiculez sí, pero ahí lo dejo.
Una vez hemos ejecutado find, y hemos repasado que todo son archivos llamados Thumbs.db, no hagáis la locura de usar en este caso un patrón como “*.db” porque podríais borrar cosas importantes, como bases de datos sqllite, podemos añadirle el modificador -delete para que haga lo propio:
find . -name "Thumbs.db" -delete
Repito, comprobad, si queréis hacerlo tranquilamente podéis generar un fichero de texto (al igual que hace el script anterior) que podáis repasar tranquilamente antes de añadir la opción -delete al comando find. Por ejemplo con este comando:
find . -name "Thumbs.db" > listado-miniaturas.txt
Usamos el redirector de salida estándar (> mayor que), para que en lugar de tirar a pantalla el flujo de información la guarde en el fichero de texto. Después abrid el fichero listado-miniaturas.txt con un editor de texto y repasad antes de borrar.
NTFS y MFT
Si quieres saber más acerca de estos dos conceptos base del sistema de archivo de Microsoft, te recomiendo buscar por internet ambos acrónimos o leer este artículo:
Cómo reserva espacio el sistema de archivos NTFS para la MFT
-
El sistema de archivos NTFS contiene en su núcleo un archivo denominado tabla maestra de archivos (MFT).
-
Hay al menos una entrada en la MFT para cada archivo en un volumen NTFS, incluyendo la propia MFT.
-
NTFS utiliza las entradas de la MFT para localizar los archivos de un volumen y toda la información sobre los mismos: su tamaño, tiempo y fecha, permisos y contenido de los datos …
Espero que os sea de utilidad, saludos y hasta la próxima.