জিএনইউ সিপি এবং এমভিতে -T বিকল্পের যুক্ত মূল্য কী?


26

কেন কিছু জিএনইউ কোরিটিলস কমান্ডের -T/--no-target-directoryবিকল্প রয়েছে? দেখে মনে হচ্ছে এটি everything .তিহ্যবাহী ইউনিক্স ডিরেক্টরি শ্রেণিবিন্যাসের (সেলফ ডট) শব্দার্থক ব্যবহার করে এটি করা যায় ।

বিবেচনা করা:

cp -rT /this/source dir

-Tবিকল্প একটি তৈরি করা থেকে কপি বাধা দেয় dir/sourceসাব। বরং এর /this/sourceসাথে চিহ্নিত করা হয়েছে dirএবং বিষয়বস্তুগুলি গাছের মধ্যে ম্যাপ করা হয়েছে। সুতরাং উদাহরণস্বরূপ /this/source/foo.cযায় dir/foo.cএবং না, বরং dir/source/foo.c

তবে -Tবিকল্পটি ব্যবহার না করে এটি সহজেই সম্পাদন করা যায় :

cp -r /this/source/. dir  # Probably worked fine since dawn of Unix?

শব্দার্থকভাবে, পিছনের ডট উপাদানটি শিশু হিসাবে অনুলিপি করা হয় dir, তবে অবশ্যই "শিশু" ইতিমধ্যে বিদ্যমান (সুতরাং এটি তৈরি করতে হবে না) এবং আসলে এটি dirনিজেই, তাই প্রভাবটি এটির /this/pathসাথে চিহ্নিত করা হয় dir

বর্তমান ডিরেক্টরি যদি লক্ষ্য হয় তবে এটি কাজ করে:

cp -r /this/tree/node/. . # node's children go to current dir

এমন কিছু আছে যা আপনি কেবল-T তার সাথে করতে পারেন যা এর অস্তিত্বকে যুক্তিযুক্ত করতে পারে? (ডট ডিরেক্টরি প্রয়োগ করে না এমন অপারেটিং সিস্টেমের জন্য সমর্থন ছাড়াও ডকুমেন্টেশনে উল্লিখিত যুক্তি নয় ale)

উপরের ডট ট্রিক কী জিএনইউ তথ্য নথিভুক্তিতে বর্ণিত একই বর্ণের পরিস্থিতি সমাধান করে না -T?

উত্তর:


29

আপনার .কৌশলটি কেবল তখনই ব্যবহার করা যেতে পারে যখন আপনি একটি ডিরেক্টরি অনুলিপি করেন, কোনও ফাইল নয়। -Tবিকল্প উভয় ডিরেক্টরি এবং ফাইল সঙ্গে কাজ করে। যদি তুমি করো:

cp srcfile destfile

এবং ইতিমধ্যে destfileএটির নামের একটি ডিরেক্টরি এতে অনুলিপি করবে destfile/srcfile, যার উদ্দেশ্য নাও থাকতে পারে। সুতরাং আপনি ব্যবহার

cp -T srcfile destfile

এবং আপনি সঠিকভাবে ত্রুটি পেয়েছেন:

cp: cannot overwrite directory `destfile' with non-directory

আপনি যদি .পদ্ধতিটি ব্যবহার করার চেষ্টা করেন তবে অনুলিপিটি কখনই কাজ করবে না:

cp: cannot stat `srcfile/.`: Not a directory

.কৌতুক করে যখন একটি ফাইল অনুলিপি, ঠিক একই সময়ে তার basename না পুনঃনামকরনের যখন কাজ! cp /path/to/file /target/dir/. যদি /target/dir/fileবিদ্যমান থাকে এবং ডিরেক্টরি হয় তবে আপনি একই ডায়াগোনস্টিক পান! তবে আপনি এটি দেখিয়েছেন যে -Tজাতি পদ ছাড়াই এটি এক ধাপে কী করা যায় না, বিনা শর্ত ছাড়াই: একটি ফাইল অনুলিপি করুন এবং নামটি সাব-ডিরেক্টরিতে না ফেলেই তার নাম পরিবর্তন করুন।
কাজ

3
একই নয় - .কৌতুক আপনার সম্পর্কে কথা বলছি সংযোজন করা হয় /.থেকে উৎস
বার্মার

21

সঙ্গে সমস্যা cp/ mv/ lnতারা মূলত ডিজাইন করা হয়েছে যে তারা দুই কমান্ড এক (হয় অনুলিপির এবং মধ্যে কপি )।

cp A B

হয় A থেকে B কে অনুলিপি করুন বা A তে অনুলিপি করুন ( কপি A তে B / A ) Bবিদ্যমান এবং ডিরেক্টরি কিনা তা নির্ভর করে (এবং বি যদি কোনও ডিরেক্টরিতে সিলেমিক হয় তবে আরও বিভিন্নতা)।

এটি খারাপ কারণ এটি অস্পষ্ট। সুতরাং জিএনইউ বাস্তবায়নগুলি এর আশপাশে কাজ করার বিকল্প যুক্ত করেছে।

cp -T A B

এ-বি-কে অনুলিপি করুন । যদি Bবিদ্যমান থাকে এবং ডিরেক্টরি হয় তবে তা ব্যর্থ হবে (যদি আপনি পাস না করেন -r)। যাই হোক না কেন, আপনি যখন বিতে অনুলিপি করার ইচ্ছা করেছিলেন তখন আপনি Aভিতরে কোনও ফাইল শেষ করবেন নাBA

এবং:

cp -t B A

হয় মধ্যে কপি


আসল ইউনিক্স দর্শন হ'ল আপনি কী করেন তা আপনাকে ধরে নিয়েছে এবং আনন্দের সাথে আপনাকে পায়ে গুলি করতে দেবে।
লেন

4
@ লেন, তবে এখানে নিজেকে পায়ে গুলি করা এড়াতে কোনও উপায় দেয় না। যদি আপনি কোনও বি ডিরেক্টরি তৈরি করেন বা কোনও ডিরেক্টরিতে সিমলিংক দিচ্ছেন আপনি cp A Bকমান্ডটি চালানোর ঠিক আগেই আপনার ইচ্ছা অনুযায়ী কাজ করবে না। এবং করা [ -e B ] || [ -L B ] || cp A Bএখনও একটি রেস শর্ত আছে যা cp -Tn A Bনেই।
স্টাফেন চেজেলাস

6

-Tএকটি ব্যর্থতা প্রদান করতে পারেন যদি একটি ডিরেক্টরি ভুল কি একটি গন্তব্য ফাইল হওয়া উচিৎ জন্য বিদ্যমান:

$ mkdir mustbeafile
$ touch afile
$ cp -T afile mustbeafile
cp: cannot overwrite directory `mustbeafile' with non-directory
$ echo $?
1
$ cp afile mustbeafile
$ 

এটি হ'ল, সাফল্যে অন-অপ্রত্যাশিত-অনুলিপি-থেকে-এ-সাবডিরের পরিবর্তে, একটি সতর্কতা এবং ভাল-প্রস্থানীয় স্থিতি ঘটে না, যা পরে কোনও স্ক্রিপ্ট বাতিল করতে পারে, এবং কেন সেখানে কোনও ডিরেক্টরি নেই যেখানে সেখানে একটি ডিরেক্টরি রয়েছে তা মানবিক তদন্ত করে এক হও.


0

কমান্ডটি ম্যানুয়ালি প্রবেশের পরিবর্তে কোনও স্ক্রিপ্টে ব্যবহার করা হলে পতাকা ব্যবহার করাও অনেক বেশি পরিষ্কার এবং অনিচ্ছাকৃত প্রভাবগুলির ঝুঁকি কম থাকে। কোনও স্ক্রিপ্টে ডটগুলিকে প্যাচিং করা সমস্ত ধরণের অপ্রত্যাশিত দুষ্টুমির অবসান ঘটাতে পারে।

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