এমভি -f এর বিন্দুটি কী?


34

গনুহ Coreutils জন্য ম্যানুয়ালmv বলেছেন:

-f --force Do not prompt the user before removing a destination file.

যাইহোক, এটি ইতিমধ্যে এর জন্য ডিফল্ট আচরণ বলে মনে হচ্ছে mv, সুতরাং -fবিকল্পটি অতিরিক্ত অতিরিক্ত হিসাবে প্রতীয়মান হবে। জিএনইউ বাশ সংস্করণে উদাহরণস্বরূপ ৪.৩.১১:

$ ls -l
total 0
$ touch 1 2; mv -f 1 2; ls
2
$ touch 1 2; mv 1 2; ls
2

-fপতাকাটির উদ্দেশ্যটি ওভাররাইড করা অসম্ভব বলে মনে হচ্ছে alias mv="mv -i", কারণ একটি উপনাম (যেমন ব্যবহার করা ) ওভাররাইড করার বিভিন্ন মানক উপায় রয়েছে \mvযা এটি আরও সংক্ষিপ্তভাবে এবং এমনভাবে করতে পারে যা কমান্ডগুলির মধ্যে সামঞ্জস্যপূর্ণ।

ম্যানুয়ালটিতে উল্লেখ করা হয়েছে যে, "যদি আপনি -i, -f, -n বিকল্পগুলির মধ্যে একটির বেশি নির্দিষ্ট করে থাকেন তবে কেবলমাত্র চূড়ান্তটি কার্যকর হয়", তবে এখনও -fপতাকাটির উদ্দেশ্য -iসাধারণত পতাকাটিকে ওভাররাইড করা অসম্ভব বলে মনে হচ্ছে , কারণ সমান ব্যবহার সহজভাবে ব্যবহার করে অর্জন করা যেতে পারে mvযা ব্যবহারের চেয়ে অনেক বেশি সংক্ষিপ্ত এবং বোধগম্য mv -if

সেটাই হচ্ছে, -fপতাকার উদ্দেশ্য কী ? কেন এটি বিদ্যমান?


6
ডিফল্ট একটি চতুর ব্যবসা। mountউদাহরণস্বরূপ একটি সরঞ্জাম নিন (যদিও আরও ভাল উদাহরণ রয়েছে)। আপনি কি প্রতিটি বিকল্পের জন্য ডিফল্টগুলি কী তা সত্যিই মনে রাখতে চান, তাই আপনাকে কোন বিকল্পগুলি সেট করতে হবে তা নির্ধারণ করতে পারবেন? ডিফল্ট এবং অ-ডিফল্ট উভয়ই বিকল্পের জন্য এটি একটি দুর্দান্ত জিনিস, তাই আপনি ডিফল্টটি কী তা মানসিকভাবে ট্র্যাক করে রাখার পরিবর্তে স্পষ্টভাবে বিকল্পটি সেট করতে পারেন। কিছু সেখানে কিছু চেয়ে মনে রাখা সহজ হয় সেখানে নেই
ওয়াইল্ডকার্ড

এমভি-কে এমভি-আই এর সাথে সংযুক্ত করা হলে সমমানের আচরণ ব্যবহার করা যাবে না
প্লাজমাএইচএইচ

1
আইএমও, স্ক্রিপ্টগুলিতে ব্যবহারের জন্য এটিও দুর্দান্ত, কারণ আপনি স্পষ্ট হয়ে উঠছেন। এটা উদ্দেশ্য আরও কিছুটা ভাল যোগাযোগ করে।
ব্ল্যাকলাইট জ্বলজ্বল

উত্তর:


41

4BSD থেকে ম্যান পৃষ্ঠাতে এর ব্যবহারটি -fআরও স্পষ্টভাবে বর্ণিত হয়েছে , যেখানে বিকল্প এবং বিকল্পগুলি যুক্ত করা হয়েছিল:-f-i

যদি ফাইল 2 ইতিমধ্যে বিদ্যমান থাকে তবে ফাইল 1 সরানোর আগে এটি সরানো হবে। যদি ফাইল 2 এর এমন মোড থাকে যা লেখা নিষেধ করে, এমভি মোড মুদ্রণ করে এবং একটি লাইন পাওয়ার জন্য স্ট্যান্ডার্ড ইনপুটটি পড়ে; যদি রেখাটি y দিয়ে শুরু হয়, সরানো হয়; যদি না হয়, এমভি প্রস্থান করে।

বিকল্প:

-iইন্টারেক্টিভ মোড জন্য দাঁড়িয়েছে। যখনই কোনও পদক্ষেপ একটি বিদ্যমান ফাইলকে ছাড়িয়ে যায়, ব্যবহারকারীকে ফাইলের নাম জিজ্ঞাসা করা হয় এবং তারপরে একটি প্রশ্ন চিহ্ন থাকে। যদি সে 'y' দিয়ে শুরু করা কোনও লাইনের সাথে উত্তর দেয় তবে সরানো অবিরত থাকে। অন্য কোনও জবাব এই পদক্ষেপটি ঘটতে বাধা দেয়।

-fবল প্রয়োগ করা। এই বিকল্পটি কোনও মোড বিধিনিষেধ বা স্যুইচকে ওভাররাইড করে -i

এমভি কীভাবে পরিচালিত হয় তার আরও সুনির্দিষ্ট সংজ্ঞাটি পসিক্স স্ট্যান্ডার্ডে দেওয়া হয় , যা যুক্ত করে যে কমান্ড লাইনে পরে যদি ঘটে তবে -fকেবল ওভাররাইড -iহয়।

তাই ডিফল্ট আচরণটি কিছুটা আলাদা -f। ডিফল্টটি তখনই নিশ্চিতকরণের জন্য জিজ্ঞাসা করা হয় যখন লক্ষ্যটি লিখিত না হয়। (এই আচরণটি কমপক্ষে ভি 4 পর্যন্ত ফিরে যায় , যেখানে mvকোনও বিকল্প নেয় নি)) -iবিকল্পটি দেওয়া হলে এমভি অতিরিক্তভাবে যখনই লক্ষ্য উপস্থিত থাকে নিশ্চিতকরণের জন্য জিজ্ঞাসা করবে। -fবিকল্প সেই ক্ষেত্রে উভয়ের মধ্যে জিজ্ঞাসা (যদি এটি কোনো পরে হয় বাধা হবে -i)।


দুর্দান্ত উত্তর, ধন্যবাদ! এনবি কিছু ফাইল সিস্টেম (যেমন সিআইএফএস) এর ফলে এমভি অপ্রত্যাশিত আচরণ (যেমন ম্যানুয়াল থেকে পৃথক) প্রদর্শিত হতে পারে যেমন অভিনয় করা যেমন -fপতাকাটি ব্যবহার না করা হলেও ব্যবহার করা হয়েছিল
সাম্পাব্লুকুপার

এটি লক্ষণীয় যে অনেকগুলি বাস্তবায়ন কেবলমাত্র যদি তারা ইন্টারেক্টিভ টার্মিনালে ( isatty(0)) উপস্থিত থাকে তবেই তা নিশ্চিতকরণের জন্য জিজ্ঞাসা করে । এছাড়াও, এটি সত্য যে পরে কোনও -fওভাররাইড করে -i, এর অর্থ এই নয় যে এটি কোনও আর্গুমেন্ট হিসাবে দেওয়া নয় as
পিএইচকে

15

mvএকটি কার্যকর ডিফল্ট নির্বাহ সেট করার সময় এটি দরকারী :

alias mv="mv -i"

আপনি যখন কোনও পদক্ষেপ নিতে বাধ্য করতে চান, এটি কাজ করবে:

mv -f

যেহেতু এটি বর্ধিত কমান্ডের সর্বশেষ বিকল্প যা গণনা করে:

mv -i -f

জিএনইউ কোরিটিলস ম্যানুয়ালটিতেও এই বিষয়টির উল্লেখ রয়েছে ।


1
ধন্যবাদ, তবে যে কারণে আমি এখন প্রশ্নটিতে যুক্ত করেছি, মনে হয় অসম্ভব যে ওভাররাইডিং alias mv="mv -i"এর অস্তিত্বের কারণ -f
সাম্পাব্লুকুপার

12
আমি পূর্বনির্ধারিতটিকে "যেমন আপনাকে জিজ্ঞাসা করা হয় তেমন কর, কোনও বোবা প্রশ্ন নয়" mv(1)(এবং অন্যান্য ইউনিক্স কমান্ড) "পাগল" হিসাবে আচরণ হিসাবে আপনাকে ইঙ্গিত করার
আপত্তি জানায়

1
ভনব্র্যান্ড, যদিও আমি লিনাক্স / ইউএনআইএক্সের কমান্ডগুলির প্রত্যক্ষ প্রতিক্রিয়াটির প্রশংসা -iকরি, আমি বিশ্বাস করি যে কয়েক বছরেরও বেশি সময় ধরে যে কমান্ড লাইনটি ব্যবহার করেছে সে একসময় mvবা অন্য কোনও জায়গায় পুড়ে গেছে ।
আলেকজান্ডার

1
আপনি ভাবেন যে ওভাররাইডিং -i সম্ভাবনা নেই, তবে ঠিক এই কারণেই আমি অনুমান করব যে -f এরকম ব্যবহার করা হয়।
ওয়াল্টার

11

এটি বিদ্যমান কারণ (man mv )

আপনি একাধিক উল্লেখ করেন -i, -f,-n , শুধুমাত্র চূড়ান্ত এক কার্যকর।

সুতরাং, আপনার কাছে একটি স্ক্রিপ্ট / ওরফে / ফাংশন থাকতে পারে যা সর্বদা জিজ্ঞাসা করে তবে আপনি এখনও বিকল্পটি ওভাররাইড করতে পারেন।

# alias
alias mv='mv -i'

# function
MV () { mv -i "$@" ; }

# script
#!/bin/bash
mv -i "$@"

একটি অর্থবহ ফাংশন / স্ক্রিপ্ট অবশ্যই আরও কিছু করবে (উদাহরণস্বরূপ অ্যাকশনটি লগ করুন)।


@ চোরোবা ধন্যবাদ, তবে যে কারণে আমি এখন এই প্রশ্নটিতে যুক্ত করেছি, অসম্ভব বলে মনে হয় না যে ওভাররাইডিং এলিয়াস যেমন alias mv="mv -i"অস্তিত্বের কারণ -f। আপনি যদিও স্ক্রিপ্ট এবং ফাংশন উল্লেখ। আপনি এই দুটি ব্যবহার করে উদাহরণ দিতে পারেন?
সাম্পাব্লুকুপার

@ সাম্পাব্লুকপার: আপডেট হয়েছে।
চোরোবা

@ চোরোবা, আবার ধন্যবাদ thanks দুঃখের বিষয়, আপনার ফাংশন উদাহরণ বা আপনার স্ক্রিপ্ট উদাহরণ ব্যবহার করে না mv -f, সুতরাং তারা কীভাবে এটির অস্তিত্ব প্রমাণ / ব্যাখ্যা করে তা এখনও আমার কাছে অস্পষ্ট। দুঃখিত যদি আমি স্পষ্ট অনুপস্থিত!
সাম্পাব্লুকুপার

@ সাম্পাব্লুকপার: এগুলি সমস্ত ব্যবহার করে mv -i। আপনি যদি সেগুলি ব্যবহার করতে চান তবে মিথস্ক্রিয়াটি এড়িয়ে যান, আপনি MV -fইত্যাদি ব্যবহার করতে চান
choroba

1
@ সাম্পাব্লুকুপার এই mvবিকল্পগুলির কোনওটি ছাড়াই আচরণটি কখনও কখনও জিজ্ঞাসা করা ( লক্ষ্যযোগ্য লিখনযোগ্য এবং ইন্টারেক্টিভ টার্মিনাল নয়), তাই এটি mv -fএবং এর মধ্যে স্পষ্ট পার্থক্য হবে \mv
পিএইচকে

5

mvসঙ্গে ভিন্নভাবে নিজস্ব করতে পারেন ফাংশন কমান্ড -fবিকল্প, যে এটি একটি বিজ্ঞপ্তি ছাড়াই ঊর্ধ্বলিপি লেখার সুরক্ষিত ফাইল করতে চেষ্টা করবে।

user2@host:location> ls -l ./
drwxrwxr-x 2 user1 users    10   Oct 16 12:58 dir
user2@host:location> ls -l ./dir/
-rw-r--r-- 2 user1 users     0   Oct 16 12:58 file1
-rw-r--r-- 2 user2 users     0   Oct 16 12:58 file2
user2@host:location> \mv ./dir/file2 ./dir/file1
'mv' try to overwrite './dir/file1', overridding mode 0644 (rw-r--r--)? n
user2@host:location> \mv -f ./dir/file2 ./dir/file1
user2@host:location> ls -l ./dir/
-rw-r--r-- 2 user2 users     0   Oct 16 12:58 file1

ডিরেক্টরিতে লেখার অনুমতিগুলির কারণে ব্যবহারকারী 2 ব্যবহারকারী 1 ফাইলগুলিতে ওভাররাইট ./dir/করতে পারে তবে তা করার আগে সতর্ক করা হবে। -fসতর্কতা প্রতিরোধ করে।


-1

শেল প্রোগ্রামিংয়ে, -f ব্যবহার করা একটি সাধারণ প্রতিমা যা নিশ্চিত করা যায় যে আপনার কমান্ডগুলি ত্রুটি সহ বাতিল না করে বা স্ক্রিপ্ট / ব্যবহারকারীকে নির্দিষ্ট আদেশগুলি চলাকালীন ইন্টারেক্টিভ প্রতিক্রিয়া জিজ্ঞাসা করে। আপনি চান সর্বশেষ জিনিসটি আপনার স্ক্রিপ্টটির জন্য ব্যবহারকারীর ইনপুটটির জন্য অপেক্ষা করা বা আরও খারাপ হতে পারে, ভুল কমান্ডটির জন্য স্ট্যান্ডার্ড থেকে ইনপুট নিতে।

দ্রষ্টব্য: একটি উপনামটি পূর্বাবস্থায় ফেরানো পার্শ্ব প্রতিক্রিয়া সৃষ্টি / অপসারণ করতে পারে। আপনি যদি অন্য সংস্করণে বা অতিরিক্ত বিকল্পগুলি দিয়ে কমান্ডটি অলিজ করে রেখেছেন, উপনামটি পূর্বাবস্থায় ফেরা অনাকাঙ্ক্ষিত পার্শ্ব প্রতিক্রিয়া সৃষ্টি করবে। উদাহরণস্বরূপ, আপনার পুনরায় ব্যবহারযোগ্য ক্যান (বা অন্যান্য সুরক্ষা / ট্র্যাকিং সিস্টেম) ব্যবহারের জন্য এমভি এবং আরএমের সাথে উপন্যাস সেটআপ থাকতে পারে। উপনামটি পূর্বাবস্থায় ফেলা হলে এটি ভেঙে যাবে ...


নিতপিক: -fসিপি বা এমভি বিকল্পের গ্যারান্টি দেয় না যে "তারা কাজ করে"। উদাহরণস্বরূপ যদি অনুমতিটি অপ্রতুল হয়, -f কমান্ড এটি কার্যকর করে না। আপনি যা বোঝাতে চেয়েছেন তা হ'ল -f প্রম্পট ছাড়াই ওভাররাইটটি চাপায় forces বিপরীত পতাকা -i এর অর্থ ওভাররাইটে ইন্টারেক্টিভ প্রয়োজন।
এরিক লেসচিনস্কি

দুটি বিষয় লক্ষণীয়: ১) বাস্তবায়নগুলি সাধারণত আপনি এমনকি ইন্টারেক্টিভ টার্মিনাল ( isatty(0)) তেও থাকেন কিনা তা পরীক্ষা করে দেখায় , উদাহরণস্বরূপ, যদি আপনার স্ক্রিপ্টটি পাইপের অংশ হিসাবে চালিত হয় তবে এটি ট্রিগার হবে না। ২) যুক্ত -fকরা পূর্বাবস্থায় সমান নয় -iকারণ এর mv -i -fথেকে পৃথক mv, মার্কের উত্তর দেখুন
পিএইচকে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.