Me preguntaba si era posible tener un comando que creara un archivo, pero cada vez que se ejecuta el comando, no sobrescribirá 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 llamar al nuevo archivo test2.txt
, o algo así. Entonces, sin sobrescribir el archivo ya existente. En cierto modo, podría ejecutarse varias veces sin problemas.
No me malinterpreten, no estoy tratando de crear varios archivos con un solo comando.
¡Gracias por adelantado!
fuente
touch test$(date +%Y%m%d-%H%M%S) ; touch test$(date +%Y%m%d-%H%M%S)
, creó solo un archivo. El tiempo de nanosegundos funciona:touch test$(date +%Y%m%d-%H%M%S%N) ; touch test$(date +%Y%m%d-%H%M%S%N)
ytouch test$(date +%Y%m%d-%H%M%S%N) test$(date +%Y%m%d-%H%M%S%N)
crea dos archivos cada uno.$()
ya que permite anidar expresiones, pero también se puede usar acentos abiertos:touch test`date +%Y%m%d-%H%M%S`
.Dudo que exista un comando general para hacer eso, pero puedes pensar en algo como esto:
El parámetro de entrada para la función se divide en prefijo, número, sufijo, luego, hasta que exista el archivo, el número se incrementa. Encontrado un espacio libre, el archivo se crea con
touch
.El mecanismo de división se debe adaptar a sus necesidades y se deben agregar varios controles de error.
fuente
Si no se requieren números de secuencia, entonces la forma más fácil es usar el
mktemp
comando.fuente
TMPFILE=$(mktemp /tmp/example.XXXXXXXXXX) || exit 1 echo "program output" >> $TMPFILE
TMPFILE='/tmp/tmp.$$'; touch $TMPFILE