Mkdir দিয়ে একবারে একাধিক ডিরেক্টরি তৈরি করার কোনও উপায় আছে কি?


112

যদি আমি একাধিক ডিরেক্টরি তৈরি করতে চাই (একই স্তরের) এবং তারপরে এটিকে ডিরেক্টরি নামের (বা সেই প্রভাবের কোনও কিছু) কমা বিচ্ছিন্ন তালিকা খাওয়াতে পারি?


38
man mkdir....
স্পারহক

5
যে কোনও সময় আপনি যদি জানতে চান যে কোনও কমান্ড আপনার করা কিছু করতে পারে manতবে কমান্ডের নামটি লিখে টাইপ করুন ।
ডেভিড রিচার্বি

@ ডেভিডরিচার্বি যদিও man mkdir"ধরণের" একসাথে একাধিক ডিরেক্টরি তৈরি করার সম্ভাবনা সম্পর্কে পরামর্শ দিয়েছিল, এটি নির্দিষ্টভাবে উল্লেখ করা হয়নি, কীভাবে এটি করা যায়।
জ্যাকব Vlijm

2
@JacobVlijm গনুহ 8,21 র manpage coreutils mkdir, বলছেন, জন্য " NAME এর mkdir, - ডিরেক্টরি // করতে সারমর্ম mkdir, [অনুযায়ী OPTION] ... [ডাইরেক্টরি] ... // বর্ণনা । ডিরেক্টরি (ies এর) তৈরি করুন যদি তারা ইতিমধ্যে না অস্তিত্ব" এটি বেশ পরিষ্কার বলে মনে হচ্ছে আপনি একাধিক ডিরেক্টরি তৈরি করতে পারেন।
ডেভিড রিচার্বি

9
@ জ্যাকবভিলিজম ম্যান পৃষ্ঠাগুলি বিন্যাস ছাড়াই সুস্পষ্ট নয়, তবে ম্যান পৃষ্ঠাগুলির প্রযুক্তিগত ভাষায় তথ্য প্রদত্ত উদ্ধৃতিতেও সম্পূর্ণ পরিষ্কার। ...পরে নোট করুন [DIRECTORY], অর্থ যে যুক্তি পুনরাবৃত্তি হতে পারে। সুতরাং DIRECTORY(ies)সমস্ত পাস DIRECTORYআর্গুমেন্ট বোঝায় । যাইহোক, "আরটিএফএম" মন্তব্যগুলি কখনও কখনও ভুলে যায় যে শিখার জন্য একটি স্বরলিপি রয়েছে।
ব্লেজারব্লেড

উত্তর:



152

ডিরেক্টরি তৈরি করতে আপনি তালিকা ব্যবহার করতে পারেন এবং এটি সুন্দর বন্য পেতে পারে।

লোকেরা এটি সম্পর্কে চিন্তাভাবনা করার জন্য কয়েকটি উদাহরণ:

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 থেকে sa50 এর মধ্যে 50 ডিরেক্টরি
  2. একই তবে প্রতিটি ডিরেক্টরি স্যাক্স 50 এর মাধ্যমে 50 বার স্যাক্স 1 ধরে রাখবে (-p যদি তাদের অস্তিত্ব না থাকে তবে প্যারেন্ট ডিরেক্টরিগুলি তৈরি করবে)।
  3. Z12345 এর মাধ্যমে এ 12345 থেকে 26 ডিরেক্টরি
  4. কমা দ্বারা পৃথক করা তালিকাটি 1, 2 এবং 3 তৈরি করে makes
  5. test01মাধ্যমে 10 ডিরেক্টরি test10
  6. 4 হিসাবে একই তবে ডিরেক্টরি হিসাবে বর্তমান তারিখ এবং এতে 1,2,3 রয়েছে।
  7. 4 হিসাবে একই তবে বর্তমান ব্যবহারকারী হিসাবে এটি একটি ডিরেক্টরি হিসাবে এবং এতে 1,2,3 রয়েছে।

সুতরাং, যদি আমি এটি সঠিকভাবে বুঝতে পারি এবং আপনি কিছু ডিরেক্টরি তৈরি করতে চান এবং সেগুলির মধ্যে নতুন ডিরেক্টরি তৈরি করতে চান তবে আপনি এটি করতে পারেন:

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

এবং sa1, sa2, ..., sa10 এবং প্রতিটি ডায়রের 1, 2 এবং 3 এর মধ্যে পান।


আমি @ gniourf_gniourf এর সাথে একমত ... আপনার উত্তরে নিয়মিত প্রকাশের কোনও ব্যবহার নেই। আপনি কি অন্য কিছু বলতে চাইছিলেন, বা অন্যরকম উদাহরণ সরবরাহ করবেন?
স্লিপ ডি থম্পসন

1
@gniourf_gniourf কাজ করেছেন :)
রিনজউইন্ড

3
এটি উল্লেখ করার মতো যে পসিক্স শেলটিতে সংজ্ঞায়িত না করে ব্রেস সম্প্রসারণ: pubs.opengroup.org/onlinepubs/9699919799/utilities/… উদাহরণস্বরূপ এটি কাজ করবে না dashযা /bin/shউবুন্টুতে ডিফল্ট ।
pabouk

7
এই উত্তরটি এমকেডিরকে আর্গুমেন্ট হিসাবে এই ইনপুটটি সরবরাহ করার আগে আপনার ইনপুটটির শেলিংয়ের সম্প্রসারণের উপর নির্ভর করে । এ কথাটি আরও সঠিকভাবে বলা যায় যে এমকেডির একাধিক যুক্তি দিয়ে একাধিক ডায়ার তৈরি করতে পারে এবং তারপরে প্রদত্ত শেল কীভাবে এটিকে সহজ করে তুলবে তা নিয়ে কথা বলুন।
deed02392

যদি আমি এর মতো কিছু করার চেষ্টা mkdir sa$(seq 0.1 0.1 1)করি তবে এটি সমস্তই sa0.1 নামের একটি ডিরেক্টরি তৈরি করে এবং বাকি 0.2, 0.3, ..., 1। সম্পূর্ণ তালিকা না লিখে আমি কীভাবে দশমিক ব্রেস সম্প্রসারণ পেতে পারি?
প্লিন্থ

26

এটি খুব সহজ, আপনাকে একটি ডিরেক্টরি কাঠামো তৈরি করতে দেয় যেমন:

Websites/
  static/
      cs
      js
  templates/
      html

আপনি এটি একটি একক আদেশে এটি করতে পারেন:

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

কোনও জায়গাতে প্রবেশ না করার বিষয়ে সতর্কতা অবলম্বন করুন


কমান্ড চালানোর আগে এগুলি প্রসারিত করতে আপনি এখানে ট্যাব টিপতে পারেন।
আইজাক গ্রেগসন

14

বিভাজক হিসাবে কমা পরিবর্তে লাইন ব্রেক ব্যবহার করে আপনার পছন্দসই ডিরেক্টরিগুলির জন্য নামের তালিকা তৈরি করুন। সেই তালিকাটি সংরক্ষণ করুন।

mkdir `cat list`

আপনার এখন আপনার তালিকায় নামযুক্ত সমস্ত ডিরেক্টরি থাকা উচিত।


1
হ্যাঁ, এটি কার্যকর হবে, তবে, একটি সাবধানতার সাথে - ডিরেক্টরিগুলির নামগুলি একটি পুরো স্ট্রিং হতে হবে। যদি একটি লাইন হয় spaced dir, তবে এটি দুটি ডায়ার তৈরি করবে spacedএবং ir দির।
সের্গেই কলডিয়াজনি

হ্যাঁ - আপনি এমনকি সফলভাবে ফাঁকা স্থানের জন্য পলায়নের কোন ধরনের না করতে পারি না, হয় - junk\ dirমধ্যে listফাইল দুটি ডিরেক্টরি দেয়, junk\ এবং dir। যখন আমি \ ডিরেক্টরী নামটিতে একটি দেখি তখন আমাকে আতঙ্কিত করে তোলে ।
জন ভি

এটি -pঅন্যান্য উত্তরে উল্লিখিত পতাকার সাথে একত্রিত হতে পারে । যদি তা হয় তবে listফাইলটি পিতামাতাকে তাদের নিজস্ব লাইন হিসাবে অন্তর্ভুক্ত করতে হবে না, সেগুলি সনাক্ত হয়ে স্বয়ংক্রিয়ভাবে তৈরি করা হবে।
mcw0933

8

এটার মতো কিছু? (টিপটির জন্য মুড়ুকে ধন্যবাদ printf)

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

আপনি সহজেই ব্যবহারের জন্য এটি কোনও কার্যে গুটিয়ে রাখতে পারেন:

function mkdir_cs {
    printf '%s' "$1" | xargs -d, mkdir
}
$ ls
$ mkdir_cs 'foo,bar,baz'
$ ls
bar  baz  foo
$ 

1
শুধু একটি printf "%s" "$1" | xargs -d, mkdirযথেষ্ট হতে হবে।
মুরু

7

সুতরাং আপনি ডিরেক্টরি নামের কমা দ্বারা পৃথক করা তালিকা চান? এটা করা যেতে পারে।

শেল + কোর্টিলস

যেহেতু প্রত্যেকে অনিয়ালনার পোস্ট করছে তাই এখানে আমারও রয়েছে (এমকেডির + প্যারামিটার সাবস্টিটিউশন প্লাস + শেল পুনঃনির্দেশ)।

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

এডব্লু কে একটি পাঠ্য প্রক্রিয়াজাতকরণ ভাষা, তবে এটির খুব সুন্দর system()ফাংশন রয়েছে যা ডিফল্ট শেল কল করে এবং কমান্ড [গুলি] বন্ধনীতে আবদ্ধ (যা অবশ্যই একটি স্ট্রিং হওয়া উচিত) করবে।

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

অথবা আপনি ফাংশন ,দিয়ে gsub()কল system("mkdir "$0)করতে এবং কল করতে পারেন তবে আপনি যদি তাদের নামে স্পেস দিয়ে ডিরেক্টরি তৈরি করতে চান তবে সমস্যা হতে পারে

পাইথন

পাইথোনিক একই পদ্ধতিটি হ'ল, প্রতিটি লাইনটি পড়তে হবে, পিছন থেকে মুক্তি পাওয়া উচিত \n, সমস্ত কিছুকে একটি তালিকায় স্থান দেওয়া এবং তালিকার আইটেমগুলির উপরে পুনরাবৃত্তি করা এবং প্রতি তালিকা আইটেম তৈরি করা। নোট করুন যে উদাহরণে নমুনাটি /home/xieerqi/dirList.txtহ'ল আমার ফাইলটিকে দেওয়া সম্পূর্ণ পথ এবং আমরা স্ট্রিং /home/username/এবং তালিকা থেকে পঠিত দির নামটিতে যোগদান করে প্রতিটি নতুন ডিরেক্টরির পুরো পথ প্রস্তুত করি । প্রয়োজনীয় হিসাবে আপনার নিজস্ব মান প্রতিস্থাপন

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)

3
আমি মনে করি না যে প্রশ্নকারী আসলে তালিকাটি কমা-বিচ্ছিন্ন করতে চায় ; আমি যথেষ্ট নিশ্চিত যে সিন্টেক্সটি কী হতে পারে এ সম্পর্কে তাদের অনুমান ছিল।
ডেভিড রিচার্বি

ঠিক আছে, ওপি সম্ভবত কমা-বিচ্ছিন্ন তালিকা থাকতে পারে নি, তবে এটি নিশ্চিত যে কোনও পদ্ধতি হিসাবে ব্যবহৃত হতে পারে, পয়েন্ট হওয়ায় "তালিকাগুলিও ব্যবহার করা যেতে পারে, আপনাকে আলাদাভাবে প্রতিটি দিরের নাম লিখতে হবে না"। বিশেষত এটি কার্যকর হবে যখন একটি বড় তালিকা যেমন রেঞ্জের সাথে তৈরি করা যায় না dir{1..1000}। বলুন, আপনি প্রতি ব্যবহারকারীর নাম, বা প্রকল্প হিসাবে, বা একটি ভৌগলিক অবস্থানের মতো কোনও শহরের মতো একটি ডিরেক্টরি তৈরি করতে চান
সের্গি কলডায়াজিনি

1

mkdir কমান্ড একাধিক আর্গুমেন্ট গ্রহণ করে নিচের মত চালানো

mkdir dir1 dir2 dir3 ... dirN

আপনি যদি একাধিক উপ-ডিরেক্টরি তৈরি করতে চান তবে নীচে দেখানো হিসাবে আপনি সেই যুক্তিগুলি {in এ পাস করতে পারেন (ফাঁকা ছাড়াই যুক্তিটি পৃথক করতে কেবল কমা ব্যবহার করুন)।

mkdir dir1 dir2/{subdir1,subdir2,subdir3,subdirN} dir3 dirN
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.