একটি ফাইল অনুলিপি করুন এবং একটি টাইমস্ট্যাম্প সংযোজন


13

আমার স্ক্রিপ্টের সাথে আমার দুটি সমস্যা আছে যা ফাইলগুলি অনুলিপি করে এবং নামের সাথে একটি টাইমস্ট্যাম্প যুক্ত করে।

cp -ra /home/bpacheco/Test1 /home/bpacheco/Test2-$(date +"%m-%d-%y-%T")

উপরে যোগ Test2ফাইলের নাম হিসাবে, কিন্তু আমি এটা যা এই উদাহরণে নামকরণ করা হয় মূল উৎস ফাইলের ফাইলের নাম রাখতে চান Test

cp -ra /home/bpacheco/Test1 /home/bpacheco/Test2-$(date +"%m-%d-%y-%r")

অন্য সমস্যাটি হ'ল আমি যখন %rটাইমস্ট্যাম্প কোডটি যুক্ত করি তখন লক্ষ্যটি "প্রধানমন্ত্রী" কোনও ডিরেক্টরি নয় বলে উল্লেখ করে ত্রুটি পাই। আমি 12 ঘন্টা ঘড়ির সময় হিসাবে টাইমস্ট্যাম্প পেতে চেষ্টা করছি।


এএম / পিএম যোগ করা ফাইলনামে অতিরিক্ত স্থান যুক্ত করে। যদি আপনি এটির জন্য কিছু করার চেষ্টা করে থাকেন: সিপি -ra / হোম / বিপাচেকো / টেস্ট 1 "/ হোম / বিপাচেকো / টেস্ট 2 - $ (তারিখ +% মি-% ডি-%
ই-

2
বাdate +"%m-%d-%y-%I:%M:%S_%p"
don_crissti

উত্তর:


12

আপনার সমস্যাগুলির মধ্যে একটি হ'ল আপনি কমান্ড প্রতিস্থাপনের চারপাশে দ্বৈত উদ্ধৃতিগুলি রেখে গেছেন, সুতরাং dateকমান্ড থেকে আউটপুট ফাঁকা জায়গায় বিভক্ত হয়েছিল। দেখুন কেন আমার শেল স্ক্রিপ্টটি সাদা স্থান বা অন্যান্য বিশেষ চরিত্রগুলিতে শ্বাসরোধ করে? এটি একটি কার্যকর আদেশ:

cp -a /home/bpacheco/Test1 "/home/bpacheco/Test2-$(date +"%m-%d-%y-%r")"

আপনি যদি মূল ফাইলের নামের সাথে যুক্ত করতে চান তবে আপনার এটির একটি ভেরিয়েবল থাকা দরকার।

source=/home/bpacheco/Test1
cp -a -- "$source" "$source-$(date +"%m-%d-%y-%r")"

আপনি যদি ব্যাশ ব্যবহার করছেন তবে আপনি পরিবর্তে ব্রেস প্রসারণ ব্যবহার করতে পারেন।

cp -a /home/bpacheco/Test1{,"-$(date +"%m-%d-%y-%r")"}

- আপনি একটি ভিন্ন ডিরেক্টরিতে ফাইল অনুলিপি করুন এবং মূল ফাইল নাম টাইমস্ট্যাম্প সংযোজন করতে চান, আপনি এই ভাবে কি করতে পারেন ${source##*/} বিস্তৃতি মূল্য sourceশেষ অংশ ছাড়া /(এটা দীর্ঘতম উপসর্গ নকশার সাথে মেলে এমন সরিয়ে ফেলা হবে */):

source=/home/bpacheco/Test1
cp -a -- "$source" "/destination/directory/${source##*/}-$(date +"%m-%d-%y-%r")"

যদি Test1কোনও ডিরেক্টরি হয় তবে এটি পুনরাবৃত্তভাবে অনুলিপি করা হয় এবং ডিরেক্টরিটির ভিতরে থাকা ফাইলগুলি তাদের নাম রাখে: কেবল শীর্ষ স্তরের ডিরেক্টরিতে টাইমস্ট্যাম্প সংযুক্ত হয় (যেমন Test1/fooঅনুলিপি করা হয় Test1-05-10-15-07:19:42 PM)। আপনি যদি সমস্ত ফাইলের নামের সাথে একটি টাইমস্ট্যাম্প যুক্ত করতে চান তবে এটি একটি ভিন্ন সমস্যা a

আপনার টাইমস্ট্যাম্প বিন্যাসের পছন্দটি একটি খারাপ ধারণা: এটি মানুষের পক্ষে পড়া কঠিন এবং বাছাই করা শক্ত। আপনার পড়া সহজতর বিন্যাসটি ব্যবহার করা উচিত এবং এটি সহজেই সাজানো যেতে পারে, অর্থাত ক্রমহ্রাসমান ক্রমগুলির সাথে: বছর, মাস, দিন, ঘন্টা, মিনিট, দ্বিতীয় এবং তারিখের অংশ এবং সময়ের অংশের মধ্যে পৃথকীকরণ সহ।

cp -a /home/bpacheco/Test1 "/home/bpacheco/Test2-$(date +"%Y%m%d-%H%M%S")"
cp -a /home/bpacheco/Test1 "/home/bpacheco/Test2-$(date +"%Y-%m-%dT%H%M%S%:z")"

গিলস, প্রথম কমান্ড আইএমএইচও কাজ করবে না, ডাবল উদ্ধৃতিগুলির অবস্থানগুলি পরীক্ষা করবে। এবং প্রশ্নটিতে আমার মন্তব্য দেখুন
রোমিও নিনভ 10'15

@ রোমোইনোভ প্রথম কমান্ডটিতে কী ভুল? আপনি এটি চালিয়েছেন এবং একটি ত্রুটি পেয়েছেন?
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন'

আপনি ঠিক বলেছেন, ডেট কমান্ড
সাবশেলে

গিলস, আপনার উপরের উদাহরণটি ব্যবহার করে, আমি উল্লিখিত টাইমস্ট্যাম্প তথ্য সহ ফাইলটি অন্য ডিরেক্টরিতে কীভাবে অনুলিপি করব। নিম্নলিখিত কমান্ডটি কাজ করে না:cp -a /home/bpacheco/Test1/Test{,"-$(date +"%m-%d-%y-%r")"} /home/bpacheco/Test2
ব্রায়ান

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