![Seleccione una parte específica de la salida y úsela para cambiar el nombre de los archivos](https://rvso.com/image/1497067/Seleccione%20una%20parte%20espec%C3%ADfica%20de%20la%20salida%20y%20%C3%BAsela%20para%20cambiar%20el%20nombre%20de%20los%20archivos.png)
Actualmente estoy clasificando archivos que recuperé de un sistema de archivos roto. Ahora todos tienen nombres de archivo que dicen algo como esto: f123123123.xls
Si ejecuto: archivo "f123123123.xls", me da mucha información y, a veces, incluso la última fecha guardada.
Ejemplo:
./recup_dir.89/f111841280.xls: Archivo de documento compuesto V2, Little Endian, sistema operativo: Windows, versión 1.0, página de códigos: -535, número de revisión: 5, tiempo total de edición: 09:58:37, última impresión: miércoles 9 de septiembre 11:57:04 2015, hora y fecha de creación: jueves 3 de septiembre a las 03:15:36 de 2015, hora y fecha del último guardado: lunes 19 de octubre a las 14:28:03 de 2015
¿Cómo puedo seleccionar la última fecha guardada y usarla para cambiar el nombre de mi archivo a algo como: Oct-19-2015.xls?
Respuesta1
Podemos encadenar algunos comandos para hacerlo. Voy a hacer que este ejemplo escriba los archivos renombrados en otro directorio, se pueden mover a donde quieras, pero personalmente me gusta mantenerlos separados en caso de que tenga algunos comienzos en falso.
mkdir renamed
for recovered in recup_dir.89/*xls; do
new_name=$(date +'%b-%d-%Y' -d "$(file "$recovered"| grep -Po 'Last Saved Time/Date:\K[^,]*')")
if [ -n "$new_name" ]; then
mv "$recovered" "renamed/$new_name.xls"
fi
done
esto recorrerá todos los archivos xls en el directorio (ya que esta información no estará en la salida de todos los archivos). Para cada uno, ejecutará el file
comando y usará la expresión regular de estilo perl de GNU grep para encontrar dónde Last Saved Time/Date:
aparece y luego obtener solo la hora después de eso. Luego usaremos el date
comando para reformatear ese momento tal como lo desee, de modo que no tengamos que manipular mucho los campos individuales en la salida.
Eso nos dará una fecha del formato Oct-19-2015
y luego usaremos ese valor en el mv
comando, como era de esperar, pero solo si realmente obtuvimos una fecha. Si no obtuvo nada a cambio, no intente cambiar el nombre del archivo (en caso de que las cosas no siempre funcionen correctamente con la cadena de comandos anterior).