opción "-p" de mkdir

96

Así que esta no parece una pregunta terriblemente complicada que tengo, pero es una a la que no puedo encontrar la respuesta. Estoy confundido acerca de lo que hace la -popción en Unix. Lo usé para una tarea de laboratorio mientras creaba un subdirectorio y luego otro subdirectorio dentro de ese. Se veía así:

mkdir -p cmps012m/lab1

Esto está en un directorio privado con derechos normales ( rlidwka). Ah, ¿y alguien le importaría dar una pequeña explicación de lo que rlidwkasignifica? No soy un novato total en Unix, pero no estoy realmente familiarizado con lo que esto significa. Con suerte, esa no es una pregunta demasiado vaga.

usuario3476866
fuente
2
man mkdirresponderá a su pregunta. En cuanto a "rlidwka", no tengo ni idea; necesitará darnos más contexto.
Keith Thompson

Respuestas:

138

Las páginas de manual son la mejor fuente de información que puede encontrar ... y está al alcance de su mano: man mkdirproduce esto sobre -pswitch:

-p, --parents
    no error if existing, make parent directories as needed

Ejemplo de caso de uso: Supongamos que quiero crear directorios hello/goodbyepero no existe ninguno:

$mkdir hello/goodbye
mkdir:cannot create directory 'hello/goodbye': No such file or directory
$mkdir -p hello/goodbye
$

-pcreado ambos, helloygoodbye

Esto significa que el comando creará todos los directorios necesarios para cumplir con su solicitud, sin devolver ningún error en caso de que exista ese directorio .

Acerca de rlidwka, Google tiene muy buena memoria para los acrónimos :). Mi búsqueda devolvió esto, por ejemplo: http://www.cs.cmu.edu/~help/afs/afs_acls.html

 Directory permissions

l (lookup)
    Allows one to list the contents of a directory. It does not allow the reading of files. 
i (insert)
    Allows one to create new files in a directory or copy new files to a directory. 
d (delete)
    Allows one to remove files and sub-directories from a directory. 
a (administer)
    Allows one to change a directory's ACL. The owner of a directory can always change the ACL of a directory that s/he owns, along with the ACLs of any subdirectories in that directory. 

File permissions

r (read)
    Allows one to read the contents of file in the directory. 
w (write)
    Allows one to modify the contents of files in a directory and use chmod on them. 
k (lock)
    Allows programs to lock files in a directory. 

Por rlidwkalo tanto significa: Todos los permisos activados .

Vale la pena mencionar, como @KeithThompson señaló en los comentarios, que no todos los sistemas Unix admiten ACL. Entonces, probablemente el rlidwkaconcepto no se aplique aquí.

Paulo Bu
fuente
1
Pero no todos los sistemas similares a Unix admiten ACL, por lo rlidwkaque puede ser significativo o no.
Keith Thompson
1
@KeithThompson Bueno, estoy de acuerdo, solo quería mencionar lo que significa el acrónimo.
Paulo Bu
1
Sí, pero a menudo el solo hecho de responder la pregunta de alguien es menos útil que proporcionar la información básica necesaria para comprender la respuesta.
Keith Thompson
1
Lo señalaré en la respuesta. Simplemente no estaba consciente de esto. Gracias por corregirme.
Paulo Bu
4
Esta respuesta es la forma más detallada posible de decir "RTFM, déjame buscarlo en Google" y me encanta. Una vez fui un pasante novato que no sabía nada, y olvidé que antes de preguntarle a mi gerente debería buscarlo en Google. Ten cuidado con estos nuevos chicos; a veces es difícil saber qué buscar en Google. No sabes lo que no sabes. Pero todos se vuelven más hábiles para buscar en Google después de años de hacerlo.
Dagrooms
4

-p|--parentse utilizará si está intentando crear un directorio con top-downenfoque. Eso creará el directorio principal, luego el secundario y así sucesivamente si no existe ninguno.

-p, --parents sin error si existe, crea directorios principales según sea necesario

Acerca de rlidwkaeso significa dar acceso completo o administrativo. Lo encontré aquí https://itservices.stanford.edu/service/afs/intro/permissions/unix .

Rahul
fuente
3

mkdir [-switch] nombre de carpeta

-p es un interruptor que es opcional, creará una subcarpeta y una carpeta principal y ni siquiera la carpeta principal no existe.

Desde la página del manual:

-p, --parents no error if existing, make parent directories as needed

Ejemplo:

mkdir -p storage/framework/{sessions,views,cache}

Esto creará sesiones de subcarpetas, vistas, caché dentro de la carpeta del marco, independientemente de que el "marco" estuviera disponible antes o no.

Amitesh Bharti
fuente
2

Tenga en cuenta que -pes un argumento para el mkdircomando específicamente, no todo Unix. Cada comando puede tener los argumentos que necesite.

En este caso, significa "padres", lo mkdirque significa que creará un directorio y cualquier padre que aún no exista.

IMSoP
fuente
2

RUTA: Respondido hace mucho tiempo, sin embargo, quizás sea más útil pensar en -p como "Ruta" (más fácil de recordar), ya que esto hace que mkdir cree cada parte de la ruta que aún no está allí.

mkdir -p / usr / bin / comm / diff / er / fence

si / usr / bin / comm ya existe, actúa como: mkdir / usr / bin / comm / diff mkdir / usr / bin / comm / diff / er mkdir / usr / bin / comm / diff / er / fence

Como puede ver, le ahorra un poco de escribir y pensar, ya que no tiene que averiguar lo que ya está y lo que no.

Capaz Mac
fuente