opção “-p” do mkdir

96

Portanto, não me parece uma pergunta terrivelmente complicada, mas para a qual não consigo encontrar a resposta. Estou confuso sobre o que a -popção faz no Unix. Usei-o para uma tarefa de laboratório ao criar um subdiretório e, em seguida, outro subdiretório dentro desse. Parecia assim:

mkdir -p cmps012m/lab1

Este está em um diretório privado com direitos normais ( rlidwka). Ah, e alguém se importaria em dar uma pequena explicação sobre o que rlidwkasignifica? Não sou um novato no Unix, mas não estou muito familiarizado com o que isso significa. Espero que essa não seja uma pergunta muito vaga.

user3476866
fonte
2
man mkdirvai responder sua pergunta. Quanto a "rlidwka", não tenho ideia; você precisará nos dar mais contexto.
Keith Thompson

Respostas:

138

As páginas do manual são a melhor fonte de informação que você pode encontrar ... e está ao seu alcance: man mkdirproduz isto sobre -pswitch:

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

Exemplo de caso de uso: suponha que eu queira criar diretórios, hello/goodbyemas nenhum existe:

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

-pcriou ambos, helloegoodbye

Isso significa que o comando criará todos os diretórios necessários para atender a sua solicitação, não retornando nenhum erro caso esse diretório exista .

Sobre rlidwka, o Google tem uma memória muito boa para siglas :). Minha pesquisa retornou este, por exemplo: 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. 

Portanto, rlidwkasignifica: Todas as permissões ativadas .

Vale a pena mencionar, como @KeithThompson apontou nos comentários, que nem todos os sistemas Unix suportam ACL. Portanto, provavelmente o rlidwkaconceito não se aplica aqui.

Paulo Bu
fonte
1
Mas nem todos os sistemas do tipo Unix suportam ACLs, então rlidwkapodem ou não ser significativos.
Keith Thompson
1
@KeithThompson Bem, eu concordo, eu só queria mencionar o que a sigla significa.
Paulo Bu
1
Sim, mas muitas vezes apenas responder à pergunta de alguém é menos útil do que fornecer informações básicas necessárias para compreender a resposta.
Keith Thompson
1
Vou apontar isso na resposta. Eu simplesmente não estava ciente disso. Obrigado por me corrigir.
Paulo Bu
4
Essa resposta é a maneira mais prolixa possível de dizer "RTFM, deixe-me pesquisar isso no Google para você" e eu adorei. Uma vez eu era um estagiário novato que não sabia de nada e esqueci que antes de perguntar ao meu gerente, eu deveria simplesmente pesquisar no Google. Vá com calma com esses caras novos; às vezes é difícil descobrir o que pesquisar no Google. Você não sabe o que você não sabe. Mas todo mundo fica mais hábil em pesquisar no Google depois de anos fazendo isso.
Dagrooms de
4

-p|--parentserá usado se você estiver tentando criar um diretório com o top-downapproach. Isso criará o diretório pai, depois o filho e assim por diante, se nenhum existir.

-p, --parents nenhum erro se existente, cria diretórios pais conforme necessário

Sobre rlidwkaisso significa dar acesso total ou administrativo. Encontrado aqui https://itservices.stanford.edu/service/afs/intro/permissions/unix .

Rahul
fonte
3

mkdir [-switch] nome da pasta

-p é uma opção que é opcional, ele criará subpasta e pasta pai, bem como a pasta pai não existe.

Na página de manual:

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

Exemplo:

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

Isso criará sessões de subpasta, visualizações e cache dentro da pasta do framework, independentemente do 'framework' estar disponível anteriormente ou não.

Amitesh Bharti
fonte
2

Observe que -pé um argumento para o mkdircomando especificamente, não para todo o Unix. Cada comando pode ter os argumentos de que precisa.

Neste caso, significa "pais", o que significa mkdirque criará um diretório e quaisquer pais que ainda não existam.

IMSoP
fonte
2

PATH: Respondido há muito tempo, no entanto, talvez seja mais útil pensar em -p como "Caminho" (mais fácil de lembrar), pois isso faz com que mkdir crie cada parte do caminho que ainda não está lá.

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

se / usr / bin / comm já existe, age como: mkdir / usr / bin / comm / diff mkdir / usr / bin / comm / diff / er mkdir / usr / bin / comm / diff / er / fence

Como você pode ver, isso economiza um pouco de digitação e reflexão, já que você não precisa descobrir o que já está lá e o que não está.

Capaz Mac
fonte