Quiero crear un directorio con un número al final, por ejemplo, "dir1", e incrementar ese número si el directorio ya existe hasta que llegue a un nombre de directorio que no existe, y necesito hacer esto en una sola línea en una línea de comando de Linux, algo como:
mkdir --increment dir$
¿Cómo voy a hacer eso?
Hasta ahora tengo esto:
dir=output; n=0; mkdir -p $dir$n; if test -d $dir$n; then n=$((n+1)); echo $dir$n; fi
Pero solo hace eco del siguiente nombre de directorio, lo necesito para ejecutar recursivamente el comando.
fuente
Si solo desea crear de forma incremental los directorios que se enumeran en el orden correcto, ¿puedo recomendar carpetas con nombres basados en la fecha actual?
Creará directorios con los nombres like
dir-2014-03-02
(YYYY-MM-DD
para que aparezcan en orden alfabético).Si crea más de un directorio por día, puede agregar la hora actual al nombre del archivo. Vea
man date
cómo ajustar el formato de salida dedate
.fuente
encuentre primero el nombre de directorio "más grande", obtenga el número e incremente eso:
fuente
printf
aquí? ¿No será unecho
trabajo simple ?dir[0-9]*
lugar dedir*
.Suponiendo que sus directorios siempre comienzan en "dir1", y que no hay archivos llamados $ dir * (es decir, todos son directorios numerados secuencialmente), puede salirse con esta frase:
Esto cuenta el número de archivos que comienzan con $ dir, luego agrega uno a ese número y crea un nuevo archivo.
fuente
Anexo a las otras respuestas: si necesita que los directorios se ordenen correctamente por nombre, también puede rellenar el nuevo número de directorio (NUM) con ceros iniciales a una longitud fija.
Lo siguiente podría condensarse en una línea o incrustarse en una de las otras soluciones.
Esto supone que NUM comienza al menos con 1 dígito de longitud y no excederá la longitud fija. Ajuste de acuerdo a sus requerimientos.
fuente