¿Si quisiera crear múltiples directorios (en el mismo nivel) y luego alimentarlo con una lista separada por comas de nombres de directorio (o algo por el estilo)?
fuente
¿Si quisiera crear múltiples directorios (en el mismo nivel) y luego alimentarlo con una lista separada por comas de nombres de directorio (o algo por el estilo)?
mkdir
toma múltiples argumentos, simplemente ejecuta
mkdir dir_1 dir_2
Puede usar listas para crear directorios y puede volverse bastante salvaje.
Algunos ejemplos para que la gente lo piense:
mkdir sa{1..50}
mkdir -p sa{1..50}/sax{1..50}
mkdir {a-z}12345
mkdir {1,2,3}
mkdir test{01..10}
mkdir -p `date '+%y%m%d'`/{1,2,3}
mkdir -p $USER/{1,2,3}
test01
través test10
.Entonces, si lo entendí correctamente y desea crear algunos directorios, y dentro de ellos nuevos directorios, entonces podría hacer esto:
mkdir -p sa{1..10}/{1,2,3}
y obtener sa1, sa2, ..., sa10 y dentro de cada directorio 1, 2 y 3.
dash
que es el predeterminado /bin/sh
en Ubuntu.
mkdir sa$(seq 0.1 0.1 1)
, todo lo que hace es crear un directorio llamado sa0.1 y el resto 0.2, 0.3, ..., 1. ¿Cómo puedo obtener la expansión de llaves decimales sin escribir la lista completa?
Es muy simple, le permite crear una estructura de directorios como:
Websites/
static/
cs
js
templates/
html
Puedes hacerlo en un solo comando como este:
mkdir -p Website/{static/{cs,js},templates/html}
Tenga cuidado de no ingresar a ningún espacio
Haga una lista de los nombres de sus directorios deseados utilizando saltos de línea en lugar de comas como separador. Guarda esa lista.
mkdir `cat list`
Ahora debería tener todos los directorios nombrados en su lista.
spaced dir
, creará dos spaced
directorios y `dir.
junk\ dir
en el list
archivo se muestran dos directorios junk\
y dir
. Me dio pánico cuando vi un \
nombre en el directorio.
-p
bandera mencionada en otras respuestas. Si es así, el list
archivo no tiene que incluir directorios principales como sus propias líneas, se detectarán y crearán automáticamente.
¿Algo como esto? (gracias a muru por la informacion printf
)
printf '%s' 'foo,bar,baz' | xargs -d, mkdir
$ ls
$ printf '%s' 'foo,bar,baz' | xargs -d, mkdir
$ ls
bar baz foo
$
Puede envolverlo en una función para facilitar su uso:
function mkdir_cs {
printf '%s' "$1" | xargs -d, mkdir
}
$ ls
$ mkdir_cs 'foo,bar,baz'
$ ls
bar baz foo
$
printf "%s" "$1" | xargs -d, mkdir
debería ser suficiente.
¿Entonces quieres una lista de nombres de directorio separados por comas? Eso se puede hacer.
Shell + coreutils
Como todo el mundo publica oneliners, aquí también está el mío (mkdir + sustitución de parámetros más + redirección de shell).
DIR:/testdir
skolodya@ubuntu:$ ls
DIR:/testdir
skolodya@ubuntu:$ mkdir $( tr '[,\n]' ' ' < /home/xieerqi/dirList.txt )
DIR:/testdir
skolodya@ubuntu:$ ls
dirFive/ dirfour/ dirone/ dirthree/ dirtwo/
AWK
AWK es un lenguaje de procesamiento de texto, pero tiene una system()
función muy agradable que llamará al shell predeterminado y ejecutará los comandos entre paréntesis (que deben ser una cadena).
DIR:/xieerqi
skolodya@ubuntu:$ awk -F ',' '{for(i=1;i<=NF;i++) system("mkdir "$i)}' dirList.txt
DIR:/xieerqi
skolodya@ubuntu:$ ls -ld dir*
-rw-rw-r-- 1 xieerqi xieerqi 23 Feb 9 11:41 dirList.txt
drwxrwxr-x 2 xieerqi xieerqi 4096 Feb 9 11:42 dirone/
drwxrwxr-x 2 xieerqi xieerqi 4096 Feb 9 11:42 dirthree/
drwxrwxr-x 2 xieerqi xieerqi 4096 Feb 9 11:42 dirtwo/
DIR:/xieerqi
skolodya@ubuntu:$ cat dirList.txt
dirone,dirtwo,dirthree
O puede eliminar ,
con gsub()
función y llamar, system("mkdir "$0)
pero eso puede ser un problema si desea crear directorios con espacios en su nombre
Pitón
La forma pitónica de hacer lo mismo sería leer cada línea, deshacerse del final \n
, meter todo en una lista e iterar sobre los elementos de la lista y crear directorios por elemento de la lista. Tenga en cuenta que en el ejemplo a continuación, /home/xieerqi/dirList.txt
es la ruta completa dada a mi archivo, y creamos la ruta completa de cada nuevo directorio uniendo una cadena /home/username/
y el nombre del directorio leído de la lista. Sustituya sus propios valores según sea necesario
DIR:/testdir
skolodya@ubuntu:$ ls
DIR:/testdir
skolodya@ubuntu:$ /home/xieerqi/makeDirs.py
DIR:/testdir
skolodya@ubuntu:$ ls
dirFive/ dirfour/ dirone/ dirthree/ dirtwo/
DIR:/testdir
skolodya@ubuntu:$ cat /home/xieerqi/makeDirs.py
#!/usr/bin/env python
import os
with open("/home/xieerqi/dirList.txt") as file:
for line in file:
for directory in line.strip().rsplit(','):
path = '/home/xieerqi/testdir/' + directory
os.makedirs(path)
dir{1..1000}
. Digamos que quieres hacer un directorio por nombre de usuario, por proyecto o por ubicación geográfica, como una ciudad
El comando mkdir toma múltiples argumentos simplemente ejecute como se muestra a continuación
mkdir dir1 dir2 dir3 ... dirN
Si desea crear varios subdirectorios, puede pasar esos argumentos en {} como se muestra a continuación (use solo comas para separar el argumento, sin espacios).
mkdir dir1 dir2/{subdir1,subdir2,subdir3,subdirN} dir3 dirN
man mkdir
....man
seguido del nombre del comando.man mkdir
"tipo de" sugiere la posibilidad de crear múltiples directorios a la vez, no se menciona específicamente, ni cómo hacerlo....
después[DIRECTORY]
, lo que significa que el argumento puede repetirse. Entonces seDIRECTORY(ies)
refiere a todos losDIRECTORY
argumentos pasados . Sin embargo, los comentarios "RTFM" a veces olvidan que hay una notación para aprender.