mkdir ile bir kerede birden çok dizin oluşturmanın bir yolu var mı?

79

Birden fazla dizin (aynı düzeyde) oluşturmak ve daha sonra dizin adları (veya bu etkiyle ilgili bir şey) virgülle ayrılmış listesini beslemek istedim?

    
sordu BGroat 09.02.2016 19:30

7 cevap

131

Kısa cevap

mkdir birden fazla argüman alır, sadece çalıştırın

mkdir dir_1 dir_2
    
verilen cevap Jacob Vlijm 09.02.2016 19:32
125

Dizin oluşturmak için listeleri kullanabilirsiniz ve oldukça vahşi olabilir.

İnsanların bunu düşünmesini sağlayan bazı örnekler:

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} 
  1. sa1 ile sa50 arasındaki 50 dizin var
  2. aynı fakat dizinlerin her biri sax50 ile 50 kez sax1 tutacaktır (eğer varolmayanlar varsa -p dizinleri oluşturacaktır.
  3. a12345'den z12345'e kadar 26 dizin
  4. virgülle ayrılmış liste, 1, 2 ve 3 numaralı dir.
  5. 10 dizin test01 - test10 arasında.
  6. 4 ile aynı, ancak geçerli tarih dizini ve 1,2,3'ü var.
  7. 4 ile aynı, ancak geçerli kullanıcı bir dizin ve 1,2,3 olarak.

Yani, eğer doğru anladıysam ve bazı dizinler oluşturmak istiyorsan, ve yeni dizinler içinde, bunu yapabilirsin:

mkdir -p sa{1..10}/{1,2,3}

ve sa1, sa2, ..., sa10 olsun ve her direktif 1, 2 ve 3 içinde.

    
verilen cevap Rinzwind 09.02.2016 19:49
17

Çok basit, aşağıdaki gibi bir dizin yapısı oluşturmak isteyebilirsiniz:

Websites/
  static/
      cs
      js
  templates/
      html

Bunu tek bir komutta yapabilirsiniz:

mkdir -p Website/{static/{cs,js},templates/html}

Boşluk girmemeye dikkat edin

    
verilen cevap anas munir 23.09.2016 22:28
12

İstediğiniz dizinlerin adlarını, ayırıcılar olarak virgül yerine satır sonlarını kullanarak yapın. Bu listeyi kaydet.

mkdir 'cat list'

Artık listenizde adlandırılan tüm dizinlere sahip olmalısınız.

    
verilen cevap SpaceCadet 09.02.2016 23:53
8

Bunun gibi bir şey mi? ( printf ipucu için muru'ya teşekkürler)

printf '%s' 'foo,bar,baz' | xargs -d, mkdir
$ ls
$ printf '%s' 'foo,bar,baz' | xargs -d, mkdir
$ ls
bar  baz  foo
$ 

Kullanım kolaylığı için bir işlev içine sarabilirsiniz:

function mkdir_cs {
    printf '%s' "" | xargs -d, mkdir
}
$ ls
$ mkdir_cs 'foo,bar,baz'
$ ls
bar  baz  foo
$ 
    
verilen cevap kos 09.02.2016 19:49
7

Yani dizin adlarının virgülle ayrılmış listesini mi istiyorsunuz? Bu yapılabilir.

Kabuk + coreutils

Herkesin onelineri yayınladığı için, benimki de benimki (mkdir + parametre değiştirme + kabuk yeniden yönlendirme).

DIR:/testdir
[email protected]:$ ls

DIR:/testdir
[email protected]:$ mkdir $( tr '[,\n]' ' '   < /home/xieerqi/dirList.txt   )                                           

DIR:/testdir
[email protected]:$ ls
dirFive/  dirfour/  dirone/  dirthree/  dirtwo/

AWK

AWK bir metin işleme dilidir, ancak varsayılan kabuğu çağırabilecek çok hoş system() işlevine sahiptir ve parantez içinde (komut dizgesi olması gereken) komut komutunu çalıştırır.

DIR:/xieerqi
[email protected]:$ awk -F ',' '{for(i=1;i<=NF;i++) system("mkdir "$i)}' dirList.txt                                    

DIR:/xieerqi
[email protected]:$ 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
[email protected]:$ cat dirList.txt                                                                                     
dirone,dirtwo,dirthree

Ya da , 'yi gsub() işleviyle kaldırabilir ve system("mkdir "\n) ' yi çağırabilirsiniz, ancak adlarında boşluk içeren dizinler oluşturmak istiyorsanız bu bir sorun olabilir

Python

Aynı şeyi yapmanın pythonik yolu, her satırı okumak, /home/xieerqi/dirList.txt takipten kurtulmak, her şeyi bir listeye taşımak ve liste öğeleri üzerinde yineleme yapmak ve liste öğesi başına dizin oluşturmak olacaktır. Örnekte, aşağıdaki örnekte, /home/username/ dosyasının dosyama verilen tam yol olduğunu ve %code% dizesini ve listeden okunan dir adını ekleyerek her yeni dizinin tam yolunu oluşturduğumuzu unutmayın. Kendi değerlerinizi gerektiği gibi değiştirin

DIR:/testdir
[email protected]:$ ls                                                                                                  

DIR:/testdir
[email protected]:$ /home/xieerqi/makeDirs.py                                                                           

DIR:/testdir
[email protected]:$ ls
dirFive/  dirfour/  dirone/  dirthree/  dirtwo/

DIR:/testdir
[email protected]:$ 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)
    
verilen cevap Sergiy Kolodyazhnyy 09.02.2016 19:44
0

mkdir komutu, birden fazla argümanı basitçe aşağıdaki gibi çalıştırır

mkdir dir1 dir2 dir3 ... dirN

Birden çok alt dizin oluşturmak isterseniz, bu argümanı {} 'da gösterildiği gibi aşağıdaki gibi iletebilirsiniz

mkdir dir1 dir2/{subdir1, subdir2, subdir3, subdirN} dir3 dirN
    
verilen cevap Vijay Sasvadiya 20.07.2018 08:38

Etiketlerdeki diğer soruları oku