
Me preguntaba si era posible tener un comando que creara un archivo, pero cada vez que se ejecuta el comando, no sobrescribiría el archivo creado en la ejecución anterior.
Por ejemplo: touch test1.txt
crearía 1 archivo llamado test1.txt
. Pero la próxima vez que lo ejecute, me gustaría que se llame al nuevo archivo test2.txt
o algo así. Entonces sin sobrescribir el archivo ya existente. En cierto modo se podría ejecutar varias veces sin problemas.
No me malinterpretes, no estoy intentando crear varios archivos con un solo comando.
¡Gracias de antemano!
Respuesta1
La solución más sencilla sería agregar una marca de tiempo al nombre del archivo y no utilizar un solo dígito.
El método más sencillo para crear un archivo vacío sería touch test$(date +%Y%m%d-%H%M%S)
y eso daría como resultado un archivo llamado test20110802-170410
. La segunda vez test*
obtendrá una marca de tiempo más nueva, por lo que generará 2 archivos.
Respuesta2
Dudo que exista un comando general para hacer eso, pero puedes pensar en algo como esto:
create() {
read prefix number suffix < <(sed -r 's/(.*)([0-9]+)\.(.*)$/\1 \2 \3/' <<<"$1")
while true; do
file="$prefix$number.$suffix"
if [[ -e "$file" ]]; then
((number++))
else
touch "$file"
break
fi
done
}
El parámetro de entrada de la función se divide en prefijo, número, sufijo y luego, hasta que el archivo exista, el número se incrementa. Encontré un espacio libre, el archivo se creó con touch
.
El mecanismo de división debe adaptarse a sus necesidades y se deben agregar varias comprobaciones de errores.
Respuesta3
Si no se requieren números de secuencia, la forma más sencilla es utilizar mktemp
el comando.