Recibí mas de un GB de archivos comprimidos en decenas de carpetas y necesitaba descomprimirlos todos dentro de sus mismas carpetas y no me hiba a poner a hacerlo de uno en uno, entonces se me ocurrio usar el comando find, al principio pensaba meter todo en un archivo y hacer un bash script para hacer un loop, pero navegando encontre como mezclarlo con xargs sin necesidad de loops, veamos:
find ./ -name '*.rar' -printf "\"%f\"\n"
Busca todos los archivos con extensión rar y luego despliega las rutas encerradas en comillas.
%f el nombre del archivo encontrado
%h la ruta relativa del archivo (empezando por .)
%p digamos que es %h + %f
Extraer todos los rar en la misma carpeta donde se encuentra:
find ./ -name '*.rar' -printf "\"%p\"\n\"%h\"\n" |xargs -n2 unrar x -y
Eliminar todos los rar despues de descomprimir:
find ./ -name '*.rar' -printf "\"%p\"\n" |xargs rm
Después me encontre con algunos problemitas, el primero fue que había archivos que tenían la extensión en mayúsculas, lo que dificultaría posteriormente hacer algún procedimiento, entonces para renombrar las extensiones de los archivos ejecuté:
find ./ -name "*.PDF" -exec rename .PDF .pdf {} \;
Antes de hacer estó intenté realizarlo con el comando rename, y me voy enterando de que este tiene 2 versiones, una que pertenece a linux-utils y otra que pertenece a perl, algunas distros traen una, algunas otra, en mi caso tengo fedora 19 el cual trae la de linux-utils, la principal diferencia es que la de perl acepta expresiones regulares, por lo que podemos modificar archivos de forma masiva, no tuve oportunidad de probar el rename basado en perl y desconozco si tiene recursividad, sin embargo me parece mas útil el uso con find.
El segundo problema con el que me encontre fue que muchos pdf estaban protegidos y otros tantos dañados, entonces que flojera abrir cada archivo para ver si te pide password, se me ocurrio usar la utilidad qpdf que te devuelve un "invalid password" y otros errores cuando intentas manipular el archivo, estos fueron enviados a un archivo temporal con el siguiente comando:
find . -name "*.pdf" -exec qpdf --show-encryption {} \; 2&> temp_file
Los archivos con errores fueron eliminados manualmente ya que no eran tantos, el tercer problema era quitarle el password a todos los archivos que lo tenían, aquí si tuve que recurrir al archivo temporal y a un script para recorrerlos:
#!/bin/bash
while read LINEA ; do
MY_PATH=${LINEA:0:-18}
qpdf --password=$PASSWORD --decrypt "$MY_PATH" "./tmp/$MY_PATH"
rm "$MY_PATH"
done > temp_file