ব্যাকআপ ফাইলের তারিখ কীভাবে যুক্ত করা যায়


69

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

আপনি কীভাবে বর্তমান তারিখটিকে একটি অনুলিপি আদেশে ইনজেক্ট করবেন?

[root@mongo-test3 ~]# cp foo.txt {,.backup.`date`}
cp: target `2013}' is not a directory

[root@mongo-test3 ~]# cp foo.txt {,.backup. $((date)) }
cp: target `}' is not a directory  

[root@mongo-test3 ~]# cp foo.txt foo.backup.`date`
cp: target `2013' is not a directory

উত্তর:


108

এটি কাজ করছে না কারণ কমান্ডটি dateফাঁকা স্থান সহ একটি স্ট্রিং প্রদান করে।

$ date
Wed Oct 16 19:20:51 EDT 2013

আপনি যদি সত্যিকারের মতো ফাইলের নাম চান তবে আপনাকে সেই স্ট্রিংটি উদ্ধৃতিতে আবদ্ধ করতে হবে।

$ touch "foo.backup.$(date)"

$ ll foo*
-rw-rw-r-- 1 saml saml 0 Oct 16 19:22 foo.backup.Wed Oct 16 19:22:29 EDT 2013

আপনি সম্ভবত আলাদা স্ট্রিং যুক্ত করার কথা ভাবছেন তবে আমার ধারণা হবে। আমি সাধারণত এই জাতীয় কিছু ব্যবহার করি:

$ touch "foo.backup.$(date +%F_%R)"
$ ll foo*
-rw-rw-r-- 1 saml saml 0 Oct 16 19:25 foo.backup.2013-10-16_19:25

তারিখ ও সময়ের জন্য আউটপুটকে ঘিরে আরও ফর্ম্যাটিং কোডের জন্য তারিখের জন্য ম্যান পৃষ্ঠাটি দেখুন ।

অতিরিক্ত ফরম্যাট

আপনি যদি ম্যান পেজের সাথে পরামর্শ করে পুরো নিয়ন্ত্রণ নিতে চান তবে আপনি এই জাতীয় জিনিসগুলি করতে পারেন:

$ date +"%Y%m%d"
20131016

$ date +"%Y-%m-%d"
2013-10-16

$ date +"%Y%m%d_%H%M%S"
20131016_193655

+1 - আমি সর্বদা তারিখের জন্য একটি ফর্ম্যাট স্পেসিফায়ার ব্যবহার করি, হয় হয় "% Y% m% d-% H% M% S" বা "% y% m% d-% H% M% S"।
চককট্রিল

ঠিক touch foo`date +%F`ভাল কাজ করে।
ভাদজিম

সাবধানতা: এটি cshশেলটিতে কাজ করে না
গোবিন্দ সাখারে

1
@ গোবিন্দসাখারে - সিএসএস / টিসিএসএসের ...পরিবর্তে ব্যাকটিক্সে ( ) পরিবর্তিত সাব-শেল নোটেশনটি স্যুইচ করুন $(..)। সি শেল দৃশ্যত সাব-শেলের জন্য এই স্বরলিপি সমর্থন করে না।
SLM

13
cp foo.txt {,.backup.`date`}

এটি এর মতো কিছুতে প্রসারিত হয় cp foo.txt .backup.Thu Oct 17 01:02:03 GMT 2013। ধনুর্বন্ধনীগুলির পূর্বে স্থানটি একটি নতুন শব্দ শুরু করে।

cp foo.txt {,.backup. $((date)) }

ধনুর্বন্ধনী পৃথক কথায় আছে, সুতরাং তারা আক্ষরিক ব্যাখ্যা করা হয়। তদুপরি, $((…))পাটিগণিতের বিস্তারের সিনট্যাক্স; এর আউটপুট dateপাটিগণিতের মত প্রকাশের মতো কিছুই নয়। কমান্ড প্রতিকল্পন প্রথম বন্ধনী একটি একক সেট ব্যবহার করে: $(date)

cp foo.txt foo.backup.`date`

ক্লোজার। আপনি যেমন ধনুর্বন্ধনী সঙ্গে এটি প্রকাশ করতে পারে cp foo.{txt,.backup.`date`}। এখনও আউটপুটটিতে dateফাঁকা স্থান রয়েছে এমন সমস্যা রয়েছে, তাই এটি ডাবল উদ্ধৃতিতে রাখা দরকার। এটি কাজ করবে:

cp foo.{txt,backup."`date`"}

অথবা

cp foo.{txt,backup."$(date)"}

এর ডিফল্ট আউটপুট ফর্ম্যাটটি dateকোনও ফাইলের নামের সাথে উপযুক্ত নয় এবং কোনও লোকাল যদি /ডিফল্ট আউটপুট বিন্যাসে অক্ষর ব্যবহার করে তবে এটি কাজ নাও করতে পারে । একটি ওয়াইএমডি তারিখ ফর্ম্যাট ব্যবহার করুন যাতে ফাইলের নামগুলিতে ডিক্সিকোগ্রাফিক ক্রম কালানুক্রমিক আদেশ হয় (এবং মার্কিন যুক্তরাষ্ট্র এবং আন্তর্জাতিক তারিখের ফর্ম্যাটগুলির মধ্যে অস্পষ্টতা এড়াতে)।

cp foo.{txt,backup."$(date +%Y%m%d-%H%M%S)"}

শেষটি আমাকে সিপি দিয়েছে: টার্গেট `foo..backup.20160913-134158 'কোনও ডিরেক্টরি নয়
কল্পনা সনি

@ কলপেশসনি আমি পোস্ট করা সঠিক আদেশটি এই ত্রুটি বার্তাটি তৈরি করতে পারে না। আপনি অবশ্যই আলাদা কমান্ড ব্যবহার করেছেন।
গিলস

10

আপনি যদি সত্যিই ভার্বোজ তারিখটি ব্যবহার করতে চান তবে আপনার ব্যাকটিকটি রক্ষা করা উচিত। এই তারিখের ফর্ম্যাটটি হ'ল এটিতে এম্বেড করা শূন্যস্থান রয়েছে, ইউনিক্স শেলের কোনও নম্বর নেই যদি না আপনি এগুলিকে উদ্ধৃতিতে রেখে দেন (বা অন্য কোনও উপায়ে এড়াতে পারেন)।

cp foo.txt "foo-`date`.txt"

তবে আমি সংক্ষিপ্ত আইএসও ফর্ম্যাটটি ব্যবহার করতে পছন্দ করি:

cp foo.txt foo-`date --iso`.txt

5

একটি ফাংশন ব্যবহার করুন, এটি আপনার জীবনকে আরও সহজ করে তুলবে। এটি আমি ব্যবহার করি:

backup () { 
    for file in "$@"; do
        local new=${file}.$(date '+%Y%m%d')
        while [[ -f $new ]]; do
            new+="~";
        done;
        printf "copying '%s' to '%s'\n" "$file" "$new";
        \cp -ip "$file" "$new";
    done
}

4

যেমনটি dateএর আউটপুটে ডিফল্ট হোয়াইটস্পেসে আছে, আপনার শেষ আদেশটি ব্যর্থ হয়েছে। যদি আপনি এর সাথে শেষ যুক্তিটি উদ্ধৃত করে থাকেন তবে "এটি কাজ করা উচিত। আপনার অন্যান্য চেষ্টাতে ঠিক ভুল বাক্য গঠন রয়েছে

হোয়াইটস্পেস ছাড়াই এখানে একটি সম্ভাব্য সমাধান:

cp foo.txt foo.backup.$(date --iso-8601=seconds)  

অথবা

cp foo.txt foo.backup.`date --iso-8601=seconds`

যোগ করলে

bk() {
     cp -a "$1" "${1}_$(date --iso-8601=seconds)"
}

আপনার .bashrcএবং পুনরায় লগইন করুন / আপনার ব্যাশ এটি পুনরায় পড়তে দিন, আপনাকে কেবল কল করতে হবে bk file.txt


আমার RHEL তারিখের ম্যানুয়ালটি --iso-8601স্যুইচটি দেখায় না , তাই আমি লিঙ্কটি এখানে রেখেছি। জিএনইউ তারিখের বিকল্পগুলি: --iso-8601
ইভান চউ

3

আপনি ব্যাকআপ ফাইলটিতে ফাইলটি অনুলিপি করেন যার নাম সংযুক্ত সময় স্ট্যাম্পের সাহায্যে তৈরি করা হয়

cp foo.txt backup_`date +"%d-%m-%Y"`.txt

বা:

আপনি "বিড়াল" ব্যবহার করে ফাইলের সামগ্রী প্রদর্শন করতে পারেন এবং ব্যাকআপ ফাইলটিতে আউটপুট পুনর্নির্দেশ করতে পারেন যার নাম সংযুক্ত সময় স্ট্যাম্পের সাহায্যে তৈরি করা হয়

cat foo.txt > backup_`date +"%d-%m-%Y"`.txt

আপনি যেমন প্রয়োজন অনুযায়ী আরও ফর্ম্যাট নিয়ন্ত্রণ বিকল্পগুলিও ব্যবহার করতে পারেন যেমন:% এইচ,% এম,% এস, ইত্যাদি।


catপুনর্নির্দেশটি ওভার দিয়ে কী সুবিধা cp?
গুইডো

এটি করার একমাত্র বিকল্প উপায়
অতুল রোকাদে

1

ব্যাশে আপনি টাইপ করতে পারেন:

cp /path/to/long/filename !#$_$(date +Is)

যা প্রসারিত:

cp /path/to/long/filename /path/to/long/filename_$(date +Is)

ফলাফল এতে:

$ ls /path/to/long/filename*
filename  filename_2017-05-10T11:50:10+0300

গরুর মাংস হচ্ছে date -Is। আমি এটি ব্যবহার করতে পছন্দ করি কারণ এটি স্মরণে রাখতে, টাইপ করতে এবং সংক্ষিপ্ত সংস্করণগুলিকে মঞ্জুরি দেয় (যেমন -Inআপনি যদি নির্ভুল ফ্রিক হন তবে)।


! একটি ইভেন্ট ডিজাইনার শুরু:

 !#     The entire command line typed so far.

এবং $একটি শব্দ ডিজাইনার:

   $      The last word.  This is usually the last argument, but will expand to the zeroth word if there is only one word in the line.

1

যখন আমাকে কোনও ফাইলের ব্যাকআপ নিতে হয় আমি সাধারণত এইভাবে এটি করি।

cp foo.txt foo.backup.$(date +%F).txt

ls -l

foo.txt foo.backup.2017-9-19.txt


1
এটি অন্যান্য উত্তরগুলি ইতিমধ্যে নিয়ে আসে নি এমন কিছুই যুক্ত করে না। অতিরিক্তভাবে, %Fতারিখের ফর্ম্যাটটি 2-অঙ্কের মাস উত্পাদন করে এবং ls -lসাধারণত কেবলমাত্র ফাইলের নামগুলির চেয়ে সামান্য বিট আরও তথ্য দেয়।
কুসালানন্দ

0

যদি আপনি কেবল ফাইল বা ডিরেক্টরিটির ব্যাকআপ চান তবে কেন গন্তব্যটিও টাইপ করুন, কেবল অনুলিপি ফাইলের নামের শেষে তারিখটি যুক্ত করতে শেল এক্সপেনশনটি ব্যবহার করুন।

অর্থাত

cp filename.sh{,."`date`"}

যার ফলস্বরূপ

filename.sh.Sun 29 Sep 00:44:43 BST 2019

বা সহজভাবে ব্যবহার

cp filename{,.20190929}

filename.sh.20190929

আপনার প্রয়োজন অনুসারে তারিখটি যুক্ত করুন। :)

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