Línea de comando: cree un archivo con un nuevo nombre de archivo si el nombre de archivo ya existe

Línea de comando: cree un archivo con un nuevo nombre de archivo si el nombre de archivo ya existe

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.txtcrearía 1 archivo llamado test1.txt. Pero la próxima vez que lo ejecute, me gustaría que se llame al nuevo archivo test2.txto 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 mktempel comando.

información relacionada