Pido disculpas por adelantado si esto ha sido respondido, pero he realizado una larga búsqueda con la esperanza de una solución.
Tengo una aplicación Automator que funciona y agrega la fecha actual de seis dígitos (YYMMDD) al final del nombre del archivo:
- Entrada: Nombre de archivo.txt
- Salida: Nombre de archivo_181212.txt
Comando de bash actual:
today=$(date +%y%m%d)
for f in "$@"
do
basename=${f##*/}
filename=${basename%.*}
path=${f%/*}
ext=${f##*.}
newfilename="$filename"_"$today"
mv "$f" "$path"/"$newfilename"."$ext"
done
Esto es genial, pero después de usarlo regularmente, me he dado cuenta de que sería bueno no solo agregar la fecha actual, sino verificar primero si la fecha ya está adjunta al nombre de archivo; si es así, elimínelo y agregue la fecha actual; de lo contrario, simplemente agregue la fecha actual.
Hay dos escenarios:
- Nombre de archivo contiene cualquier fecha (anterior / actual / futuro) en el formato de 6 dígitos descrito anteriormente precedido por un guión bajo (Nombre de archivo_181212.txt)
- El nombre de archivo no contiene el formato de fecha de 6 dígitos que se le anexa (Filename.txt)
Me doy cuenta de que la solución que espero eliminará cualquiera de los seis dígitos y su "_" precedente, si existe, sea una fecha o no.
¿Es posible preceder mi comando de bash actual con algo como:
si existe una combinación de números inmediatamente antes del archivo la extensión (".ext") AND contiene exactamente 6 dígitos AND está precedida por un guión bajo ("_")
luego elimina el guión bajo más 6 dígitos Y ejecuta el comando bash listado arriba
si no es así, ejecute el comando bash anterior
Resumen Intento eliminar manualmente las fechas que puedan existir en un nombre de archivo antes de agregarles la fecha actual. Algunos archivos pueden tener fechas y otros pueden no.