Pido disculpas de antemano si esto ya ha sido contestado pero he realizado una larga búsqueda con la esperanza de una solución.
Tengo una aplicación de Automator que funciona y que añade la fecha actual de seis dígitos (AAMMDD) al final del nombre del archivo:
- Entrada: Filename.txt
- Salida: Filename_181212.txt
Comando 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 estaría bien no sólo añadir la fecha actual, sino también comprobar primero si ya hay una fecha añadida al nombre del archivo; si es así, eliminarla y añadir la fecha actual, si no, simplemente añadir la fecha actual.
Hay dos escenarios:
- El nombre del archivo contiene cualquier fecha (anterior/actual/futura) en el formato de 6 dígitos descrito anteriormente precedido por un guión bajo (Filename_181212.txt)
- El nombre del archivo no contiene un formato de fecha de 6 dígitos (Filename.txt)
Me doy cuenta de que la solución que espero eliminará cualquier seis dígitos y su "_" precedente si existe, sea una fecha o no.
¿Es posible preceder mi comando bash actual con algo como
si existe cualquier combinación de números inmediatamente antes de la extensión del archivo (".ext") Y contiene exactamente 6 dígitos Y está precedida por un guión bajo ("_")
entonces elimine el guión bajo más 6 dígitos Y ejecute el comando bash listado arriba
Si no es así, ejecute el comando bash anterior
Resumen Estoy tratando de aliviar la eliminación manual de las fechas que pueden existir en un nombre de archivo antes de añadir la fecha actual a ellos. Algunos archivos pueden tener fechas y otros no.
0 votos
Sí, pero parece que en este caso, el comando de fecha es irrelevante porque sólo hay que encontrar 6 dígitos (más el guión bajo precedente) independientemente de si es una fecha pasada, anterior o futura.
0 votos
Lo siento, he borrado mi comentario al darme cuenta de que es estúpido.
0 votos
La fecha en el nombre del archivo no es una fecha, sólo texto plano (números) pero lo vemos como una fecha. Si se eliminan todos los números del nombre del archivo, ¿funcionará?
0 votos
Creo que sí, pero también habrá que eliminar el "_" porque se añadirá uno cuando se añada la fecha actual. Como recordatorio, si la fecha no existe, entonces no se elimina nada; simplemente se pasa al comando que anexa la fecha (que actualmente tengo).
0 votos
es un proceso bastante quirúrgico el que pides. Y simplemente borrar el nombre del archivo y reemplazarlo con la fecha no es una opción para usted.
0 votos
Vale. Supongo que estaba siendo optimista y pensando que podría haber una sentencia condicional que dijera algo así como: si x existe, entonces haz y + z; si no sólo haz z... donde x es algo así como "_181212", y es eliminar x y z es añadir la fecha actual. Gracias por su consideración.
0 votos
No, no digo que no sea posible, sólo que no sé cómo.