একটি বিদ্যমান ডিরেক্টরি ওভাররাইট?


11

আমার একটি ডিরেক্টরি নাম fooরয়েছে ~/Desktop। ধরুন আমি টার্মিনাল থেকে একই নামে এবং একই জায়গায় একটি ডিরেক্টরি তৈরি করতে চাই। আমি চেষ্টা করার সময় mkdirএটি একটি ত্রুটি দিয়েছে:

mkdir: cannot create directory `/home/nux/Desktop/foo': File exists

Thats বুদ্ধিমান, কিন্তু আমি fooউপস্থিত থাকলে প্রতিস্থাপন করতে চান । আমি দেখেছি man mkdirকিন্তু এমন কোনও বিকল্প নেই যা তা করে।

তাহলে fooডিরেক্টরি কীভাবে ওভাররাইট করা যায় ?

কেন এটি mkdirকরার বিকল্প নেই ?


fooএটির সমস্ত সামগ্রী মুছে ফেলা হিসাবে প্রতিস্থাপন করবেন ? ডিরেক্টরি উপস্থিত থাকলে উপেক্ষা করে mkdirএমন একটি -pবিকল্প রয়েছে।
মুড়ু

4
সুতরাং, আপনি একটি কমান্ড চান যা কোনও ডিরেক্টরিতে সমস্ত ফাইল মুছে ফেলবে যখন আপনি ঘটনাক্রমে একই নামে একটি নতুন ডিরেক্টরি তৈরি করবেন? এবং আপনি ভাবছেন কেন এটি কোনও বিকল্প নয়? এটা কি একটি তামাশা?
মার্টি ফ্রাইড

ডাউনভোটাররা কেবল এটি স্পষ্ট করে কেন, এমন একটি কমান্ডের বিষয়ে জিজ্ঞাসা করছে যা একটি বিদ্যমান ডিরেক্টরি মুছে
ফেলবে

1
আমার কাছে @ প্রশ্নটি কোনও অর্থহীন নয় ... আপনি কেন কোনও ডিরেক্টরি মুছতে এবং পুনরায় তৈরি করতে চান তা ব্যাখ্যা করুন। ডিরেক্টরিতে আপনাকে যা করতে হবে তার জন্য আমাদের কাছে আদেশ রয়েছে। mkdir অপসারণ / পুনরায় তৈরি করতে কোনও বিকল্পের প্রয়োজন নেই।
রিঞ্জউইন্ড

1
কোন যুক্তি প্রশ্ন জিজ্ঞাসা করা হলে এখানে অপরাধ কি !!
nux

উত্তর:


21

যদি আপনার লক্ষ্যটি এক-লাইন কমান্ড কার্যকর করা হয় যা:

  • ডিরেক্টরিটি ~/Desktop/fooইতিমধ্যে বিদ্যমান থাকলে সরিয়ে এবং পুনরায় তৈরি করে ।
  • ডিরেক্টরিটি ~/Desktop/fooইতিমধ্যে বিদ্যমান না থাকলে এটি তৈরি করে ।

তারপরে আপনি ব্যবহার করতে পারেন:

rm -r ~/Desktop/foo; mkdir ~/Desktop/foo

; একটি নতুন লাইনের সমতুল্য, তবে এটি আপনাকে একক লাইনে একাধিক কমান্ড কার্যকর করতে দেয় (অর্থাত্ "একক আদেশ" হিসাবে)।

  • আপনি যে ডিরেক্টরিটি অপসারণ করছেন সেটিতে যদি কেবল পঠনযোগ্য ফাইল থাকতে পারে -fতবে ব্যবহারকারীকে ইন্টারেক্টিভভাবে অনুরোধ না করে সেগুলি সরিয়ে ফেলার জন্য আপনার পতাকা লাগানো দরকার । এটি ঠিক আছে, তবে আমি বিশেষভাবে সতর্কতার পরামর্শ দিচ্ছি rm -rf ...। দেখুন man rmবিস্তারিত জানার জন্য।
  • আপনার যা দরকার তা rmকমান্ড শেষ করার আগে mkdirবিধান; এই ;পরিবর্তে ব্যবহার করার কারণ &। (পূর্ববর্তী একটি কমান্ড &পটভূমিতে অবিচ্ছিন্নভাবে চালিত হয়))
  • কমান্ড সফল mkdirহলে আপনার চালনার জন্য কমান্ডের প্রয়োজন rm; এই ;পরিবর্তে ব্যবহার করার কারণ ||
  • কমান্ডটি ব্যর্থ mkdirহলে আপনার চালনার জন্য কমান্ডের প্রয়োজন rm(সাধারণত ব্যর্থতার অর্থ ডিরেক্টরিটি ইতিমধ্যে উপস্থিত ছিল না); এই ;পরিবর্তে ব্যবহার করার কারণ &&
  • rmযখন নির্দেশিকা ইতিমধ্যেই, অস্তিত্ব যে ক্ষেত্রে কমান্ড এমনকি ব্যর্থ হতে পারে mkdirকমান্ড ব্যর্থতা হবে, কিন্তু ত্রুটি বার্তা জানার জন্য হবে এবং সেখানে সম্ভবত একটি মধ্যম ধাপ পরীক্ষণ জোড়ার জন্য কোনো প্রয়োজন fooসেটি তৈরি করতে চেষ্টা করার আগে এর অস্তিত্ব।

দেখুন কমান্ড এর 3.2.3 তালিকাসমূহ মধ্যে ব্যাশ রেফারেন্স ম্যানুয়াল আরো তথ্য এবং সম্পর্কে ব্যাখ্যা জন্য ;, &, ||, এবং &&অপারেটর।

যেমন মুড়ু পরামর্শ দিয়েছে (এবং রিঞ্জওয়াইন্ড বিশদভাবে ), আমিrsync আপনাকে এটি দেখার পরামর্শ দিচ্ছি যে এটি আপনার ব্যাকআপের প্রয়োজনীয়তাগুলি পূরণ করবে কিনা to আরএসআইএনসি ডকুমেন্টেশন পৃষ্ঠায় কিছু অতিরিক্ত দরকারী গাইড রয়েছে , পাশাপাশি এই উবুন্টু আরএসএনসি গাইডও রয়েছে

কেন এমকেডিরের এই বিকল্প নেই?

mkdirডিরেক্টরিগুলি তৈরি করে ("এমকে" "মেক" এর জন্য বোঝায় )। এর জন্য ডিরেক্টরিগুলি পুনরাবৃত্তভাবে মুছে ফেলা এবং এগুলির সমস্ত ফাইলই খারাপ হবে, কারণ এটি এমনভাবে ন্যূনতম বিস্ময়ের নীতি লঙ্ঘন করবে যা সম্ভবত ডেটা ক্ষতিগ্রস্থ হতে পারে।

rmdirএমনকি যে ডিরেক্টরিগুলিতে সেগুলির মধ্যে কোনও (নন-ডিরেক্টরি) ফাইল রয়েছে তা সরিয়ে দেয় না। rmএকটি -rঅপশন রয়েছে, যা rmফাইলগুলি অপসারণের প্রত্যাশার পরে থেকেই বোঝা যায় (এটি তার উদ্দেশ্য, এভাবে অন্তর্নিহিত বিপদ স্বজ্ঞাত এবং ব্যবহারকারীরা সাধারণত rmকমান্ডগুলি চালনার সময় সতর্কতা অবলম্বন করতে জানেন )।


+1 দুর্দান্ত। এই উত্তরটি সিনট্যাক্সের ব্যাখ্যা দেওয়ার ওপরে এবং অতিক্রম করে চলেছে, এমন কিছু যা আমি ইচ্ছা করি স্ট্যাকেক্সচেঞ্জ সাইটগুলিতে আরও গভীর ছিল। এই উত্তরে অনেকগুলি সোনার নগেট রয়েছে।
গোবিন্দ রাই

7

না, আপনি যা জিজ্ঞাসা করছেন তা করার কোনও একক আদেশ নেই।

কেন?

এটি ইউনিক্স দর্শন: এমন একটি প্রোগ্রাম লিখুন যা একটি কাজ করে এবং এটি ভাল করে। এক সাথে কাজ করার জন্য প্রোগ্রাম লিখুন। 1

এই ইনস্ট্যান্সের মধ্যে, mkdirএবং rmকমান্ড কি আপনি প্রয়োজন, ভাল একত্র, যেহেতু এবং কাজ rm -rহিসাবে ভাল ডিরেক্টরি মুছে ফেলবে, তাই একটি পরবর্তী mkdirডিরেক্টরি তৈরি করবে।

1 দ্য আর্ট অফ ইউনিক্স প্রোগ্রামিং , এরিক এস রেমন্ড, নিজেই ডগ ম্যাকিল্রয়ের উদ্ধৃতি দিয়েছিলেন।


আপাতত, একটি ভাল উত্তর দেয়, আমি এটি অনুসন্ধান করব
nux

3

ডিরেক্টরি মুছে ফেলার কমান্ডটি হ'ল rm। সুতরাং আপনার 2 কমান্ডের দরকার।

rm -r ~/Desktop/foo/
mkdir ~/Desktop/foo/

মন্তব্যে দেখানো হিসাবে আপনি এগুলি চেইন করতে পারেন ;(= প্রথম ব্যর্থ হলেও উভয়ই করুন) বা &&(আরএম ব্যর্থ না হলে কেবল = এমকিডির)।

-rDirs সরানোর জন্য। 1 তম কমান্ড ডিরেক্টরিতে সমস্ত সামগ্রী সরিয়ে দেয়। যদি এটি আপনার উদ্দেশ্য না হয় তবে rm এবং mkdir উভয়ই আপনি যা সন্ধান করছেন তা নয়: অনুমতিগুলি হ'ল chmodএবং chown

কেন এমকেডিরের এই বিকল্প নেই?

অস্পষ্টতা। mkdirমানে ডিরেক্টরি বানান। সরিয়ে নাও ডিরেক্টরি তৈরি করুন। এবং যেহেতু rmকমান্ডটি সামগ্রী মোছার জন্য রয়েছে তাই কোনও rmdirডিরেক্টরি মুছে ফেলতে সক্ষম হওয়ার প্রয়োজন নেই ।


আমি এটি জানি, তবে আমার একটি কমান্ডের অর্থ, আপনি আমার সম্পাদনাটি দেখতে পারেন আমি এটি পরিবর্তন করতে পারি
nux

আপনার ডিরেক্টরিটি পুনরায় তৈরি করতে হবে কেন প্রথম ব্যাখ্যা করুন। এটা আমার বোধগম্য হলো না.
রিঞ্জউইন্ড

আমার প্রয়োজনটি কি বোধগম্য, আমি কীভাবে ভাবছি? এটি আমার জন্য
অর্থপূর্ণ

@nux না এটি করে না। এবং উভয়ই এমকেডির রক্ষণকারীরা বুঝতে পারে না কেন;) আপনি যা চান তা নিরর্থক এবং এর কোনও যোগ্যতা নেই।
রিনজউইন্ড

ঠিক আছে আপনি যদি জানতে চান যে একইভাবে ফু এর একই নামের সাথে একটি নতুন ডিরেক্টরিতে ব্যাকআপ তৈরি করার জন্য একটি স্ক্রিপ্ট তৈরি করছি এবং স্থান হ্রাস করার জন্য উপস্থিত থাকলে এটি প্রতিস্থাপনের অনুমতি দেবে
nux

1

এটি সবচেয়ে পরিষ্কার উপায়ে করতে আমি এটি ব্যবহার করি:

create_clean_directory(){
    dir_name=$1
    if [ -d "$dir_name" ]; then
        echo "Removing $dir_name"
        rm -rf "$dir_name"
    elif [ -f "$dir_name" ]; then
        echo "File with this name already exists, not a directory."
        exit
    fi
    if mkdir "$dir_name"; then
        echo "Clean directory created: $dir_name"
        return 0
    else
        echo "Creating directory failed: $dir_name"
        return 1
    fi 
}

এবং এটি ব্যবহার করতে:

create_clean_directory <dir_name>

এটি নিশ্চিত করে যে আপনি যা মুছে ফেলার চেষ্টা করছেন তা একটি ডিরেক্টরি নয় একটি ফাইল:

  1. -dসেই নামের একটি ডিরেক্টরি ইতিমধ্যে বিদ্যমান কিনা তা পরীক্ষা করুন। যদি তাই হয়, এটি মুছুন।

  2. -fএই নামের কোনও ফাইল বিদ্যমান নেই তা পরীক্ষা করুন। যদি তা হয়, ত্রুটি বার্তা মুদ্রণ এবং প্রস্থান করুন।

  3. নতুন ডিরেক্টরি তৈরি করুন এবং প্রতিধ্বনি সাফল্য, অথবা ব্যর্থ হলে প্রতিধ্বনি ব্যর্থ হয়েছে।

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