ফাইল এবং এর মূল ডিরেক্টরি তৈরি করুন


19

আমি জানি যে touchকমান্ড একটি ফাইল তৈরি করে:

touch test1.txt

তবে আমি কীভাবে একটি ফাইল এবং এর সম্পূর্ণ পথ তৈরি করতে পারি?

উদাহরণস্বরূপ, আমার ডেস্কটপে কিছুই নেই:

~/Desktop/$ ls
~/Desktop/$

এবং আমি 1. টেক্সট ইন তৈরি করতে চাই ~/Desktop/a/b/c/d/e/f/g/h/1.txt। আমি কি সাধারণ কমান্ডের মতো এটি করতে পারি:

$ touch ~/Desktop/a/b/c/d/e/f/g/h/1.txt

পরিবর্তে ম্যানুয়ালি পুরো পাথ তৈরি করুন এবং তারপরে ফাইলটি তৈরি করবেন?

উত্তর:


23

touchডিরেক্টরি তৈরি করতে সক্ষম নয়, আপনার এটির প্রয়োজন mkdir

তবে, mkdirদরকারী -p/ --parentsবিকল্প যা একটি সম্পূর্ণ ডিরেক্টরি কাঠামো তৈরি করে।

থেকে man mkdir:

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

সুতরাং আপনার নির্দিষ্ট পরিস্থিতিতে আপনার যে আদেশটি প্রয়োজন তা হ'ল:

mkdir -p ~/Desktop/a/b/c/d/e/f/g/h/ && touch ~/Desktop/a/b/c/d/e/f/g/h/1.txt

আপনি যদি মনে করেন যে আপনার এটির প্রায়শই প্রয়োজন হয় এবং প্রতিবার দুবার পথটি টাইপ করতে না চান তবে আপনি এর জন্য একটি বাশ ফাংশন বা স্ক্রিপ্টও তৈরি করতে পারেন।

  • বাশ ফাংশন ( ~/.bashrcএটি আপনার ব্যবহারকারীকে অবিচলিতরূপে উপলব্ধ করার জন্য এই লাইনটি সংযোজন করুন, অন্যথায় আপনি যখন আপনার টার্মিনালটি থেকে বেরিয়ে আসবেন তখন এটি আবার নিখোঁজ হয়ে যাবে):

    touch2() { mkdir -p "$(dirname "$1")" && touch "$1" ; }
    

    এটি সহজেই এর মতো ব্যবহার করা যেতে পারে:

    touch2 ~/Desktop/a/b/c/d/e/f/g/h/1.txt
    
  • বাশ স্ক্রিপ্ট (এটি /usr/local/bin/touch2সমস্ত ব্যবহারকারীর জন্য উপলভ্য করতে sudo ব্যবহার করে সঞ্চয় করুন , অন্যথায় ~/bin/touch2কেবল আপনার ব্যবহারকারীর জন্য):

    #!/bin/bash
    mkdir -p "$(dirname "$1")" &&
        touch "$1"
    

    স্ক্রিপ্টটি ব্যবহার করে সম্পাদনযোগ্য করতে ভুলবেন না chmod +x /PATH/TO/touch2

    এর পরে আপনি এটিকে এভাবে চালাতে পারেন:

    touch2 ~/Desktop/a/b/c/d/e/f/g/h/1.txt
    

আমি কি মূল touch কমান্ডটি সম্পাদনা করতে এবং এতে পরিবর্তন -pকরতে পারি?
এম এ হেশমত খাহ

3
@ হেশমতখাহ এটি সম্ভব হওয়া উচিত, তবে আপনার নিজের স্ক্রিপ্ট বা ফাংশন সহ সিস্টেম এক্সিকিউটেবলকে ছায়া দেওয়ার পরামর্শ দেওয়া হয় না। আপনি এর touch-pপরিবর্তে নাম (কোনও স্থান নেই!) ব্যবহার করতে পারেনtouch2 যদি "p" পছন্দ করেন তবে করতে পারেন, তবে আমি মূল কমান্ডটি প্রতিস্থাপনের চেষ্টা করব না।
বাইট কমান্ডার

1
মনে রাখবেন আপনি পরিবর্তে প্রত্যয় অপসারণ ব্যবহার করতে পারেন dirnameপাশাপাশি, IE কাজ করতে পারতেন তা mkdir -p "${1%/}" && touch "$1"একই হিসাবে, askubuntu.com/a/928544/295286
Sergiy Kolodyazhnyy

7

একটি পতাকা installসহ কমান্ড ব্যবহার করতে পারেন -D

bash-4.3$ install -D /dev/null mydir/one/two

bash-4.3$ tree mydir
mydir
└── one
    └── two

1 directory, 1 file
bash-4.3$ 

আমাদের যদি একাধিক ফাইল থাকে তবে আমরা আইটেমের একটি তালিকা ব্যবহার করে বিবেচনা করতে পারি (নোট করুন, স্পেস সহ আইটেমের উদ্ধৃতিটি স্মরণ করুন) এবং সেগুলি দিয়ে পুনরাবৃত্তি করুন:

bash-4.3$ for i in mydir/{'subdir one'/{file1,file2},'subdir 2'/{file3,file4}} ; do 
> install -D /dev/null "$i"
> done
bash-4.3$ tree mydir
mydir
├── one
│   └── two
├── subdir 2
│   ├── file3
│   └── file4
└── subdir one
    ├── file1
    └── file2

বা বিকল্পভাবে অ্যারে সহ:

bash-4.3$ arr=( mydir/{'subdir one'/{file1,file2},'subdir 2'/{file3,file4}} )
bash-4.3$ for i in "${arr[@]}"; do  install -D /dev/null "$i"; done
bash-4.3$ tree mydir
mydir
├── one
│   └── two
├── subdir 2
│   ├── file3
│   └── file4
└── subdir one
    ├── file1
    └── file2

এই পদ্ধতির সাথে, নতুন ফাইলটি ডিফল্টরূপে নির্বাহযোগ্য অনুমতি পায় gets এটিকে একই স্পর্শ করার সাথে একই অনুমতি দেওয়ার জন্য, কেউ এটি ব্যবহার করতে পারেনinstall -m 644 -D /dev/null <filepath>
রিক্যাব

1

এই উদ্দেশ্যে আপনি নিজের ফাংশন তৈরি করতে পারেন, উদাহরণস্বরূপ নীচে:

$ echo 'mkfile() { mkdir -p "$(dirname "$1")" && touch "$1" ;  }' >> ~/.bashrc
$ source ~/.bashrc
$ mkfile ./fldr1/fldr2/file.txt

প্রথমে আমরা ইকো কমান্ড ব্যবহার করে function / .bashrc ফাইলটির শেষে একটি ফাংশন সন্নিবেশ করি। ফাংশনে থাকা -p পতাকাটি নীড়যুক্ত ফোল্ডারগুলি যেমন আমাদের উদাহরণ থেকে fldr2 তৈরি করতে দেয়। অবশেষে আমরা উত্স কমান্ড সহ ফাইলটি আপডেট করি এবং শেষ পর্যন্ত এমকিফিল কমান্ডটি কার্যকর করি

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.