mkdir'in "-p" seçeneği


100

Yani bu, sahip olduğum çok karmaşık bir soru gibi görünmüyor, ancak cevabını bulamadığım bir soru. -pUnix'te seçeneğin ne yaptığı konusunda kafam karıştı . Bunu bir alt dizin oluştururken laboratuar ödevi için kullandım ve ardından bunun içinde başka bir alt dizin kullandım. Şöyle görünüyordu:

mkdir -p cmps012m/lab1

Bu, normal haklara sahip özel bir dizinde ( rlidwka). Oh, ve birisi ne rlidwkaanlama geldiğine dair küçük bir açıklama yapmaktan çekinir mi? Unix için tam bir çaylak değilim, ama bunun ne anlama geldiğini gerçekten bilmiyorum. Umarım bu çok belirsiz bir soru değildir.


2
man mkdirsorunuzu cevaplayacak. "Rlidwka" konusuna gelince, hiçbir fikrim yok; bize biraz daha bilgi vermeniz gerekecek.
Keith Thompson

Yanıtlar:


145

Man sayfaları, bulabileceğiniz en iyi bilgi kaynağıdır ... ve parmaklarınızın ucunda: geçiş man mkdirhakkında şunu verir -p:

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

Kullanım örneği örneği: Dizin oluşturmak istediğimi hello/goodbyeancak hiçbirinin olmadığını varsayın :

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

-poluşturulan hem hellovegoodbye

Bu , komutun, isteğinizi yerine getirmek için gerekli olan tüm dizinleri oluşturacağı ve söz konusu dizin olması durumunda herhangi bir hata döndürmeyeceği anlamına gelir .

Hakkında rlidwka, Google'ın kısaltmalar için çok iyi bir hafızası var :). Aramam örneğin şunu döndürdü: 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. 

Dolayısıyla şu rlidwkaanlama gelir: Tüm izinler açık .

@KeithThompson'ın yorumlarda belirttiği gibi, tüm Unix sistemlerinin ACL'yi desteklemediğini belirtmekte fayda var. Yani muhtemelen rlidwkakonsept burada geçerli değil.


1
Ancak tüm Unix benzeri sistemler ACL'leri desteklemez, bu nedenle rlidwkaanlamlı olabilir veya olmayabilir.
Keith Thompson

1
@KeithThompson Katılıyorum, sadece kısaltmanın ne anlama geldiğinden bahsetmek istedim.
Paulo Bu

1
Evet, ancak çoğu kez birinin sorusunu yanıtlamak, yanıtı anlamak için gereken arka plan bilgilerini sağlamaktan daha az yararlıdır.
Keith Thompson

1
Cevapta bunu belirteceğim. Bunun farkında değildim. Beni düzelttiğin için teşekkürler.
Paulo Bu

4
Bu cevap, "RTFM, bunu senin için Google'da araştırmama izin ver" demenin mümkün olan en ayrıntılı yoludur ve onu seviyorum. Bir zamanlar hiçbir şey bilmeyen bir noobie stajyeriydim ve menajerime sormadan önce bunu sadece google'da aramam gerektiğini unutmuştum. Bu yeni adamlara karşı sakin olun; bazen neyi google'a çevireceğinizi anlamak zordur. Neyi bilmediğini bilmiyorsun. Ancak yıllarca yaptıktan sonra herkes Google'da daha yetenekli hale geliyor.
Dagrooms

4

mkdir [-switch] klasör adı

-p isteğe bağlı bir anahtardır, alt klasör ve üst klasör oluşturacak ve üst klasör bile mevcut değildir.

Man sayfasından:

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

Misal:

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

Bu, alt klasör oturumları, görünümler, çerçeve klasörünün içinde önbellek oluşturacak, 'çerçeve'nin daha önce mevcut olup olmadığına bakılmaksızın.



2

Not -piçin bir argümandır mkdirözellikle komuta değil, Unix bütün. Her komutun ihtiyaç duyduğu argümanlar olabilir.

Bu durumda "ebeveynler" anlamına gelir, yani mkdirbir dizin ve mevcut olmayan herhangi bir üst öğe oluşturacaktır.


2

PATH: Uzun zaman önce yanıtlandı, ancak, -p'yi "Yol" (hatırlaması daha kolay) olarak düşünmek daha yararlı olabilir, çünkü bu, mkdir'in yolun zaten orada olmayan her parçasını oluşturmasına neden olur.

mkdir -p / usr / bin / comm / diff / er / çit

/ usr / bin / comm zaten varsa, şu şekilde davranır: mkdir / usr / bin / comm / diff mkdir / usr / bin / comm / diff / er mkdir / usr / bin / comm / diff / er / çit

Gördüğünüz gibi, zaten orada olanı ve olmadığını anlamanız gerekmediğinden, sizi biraz yazıp düşünmekten kurtarıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.