একটি ডিরেক্টরি লক্ষ্য, কিন্তু সংরক্ষণাগারটিতে সম্পূর্ণ নিখুঁত পাথ সংরক্ষণ করবেন না


277

ব্যাকআপ শেল স্ক্রিপ্টের অংশে আমার কাছে নিম্নলিখিত কমান্ডটি রয়েছে:

tar -cjf site1.bz2 /var/www/site1/

আমি যখন সংরক্ষণাগারটির বিষয়বস্তুগুলি তালিকাভুক্ত করি তখন আমি পাই:

tar -tf site1.bz2
var/www/site1/style.css
var/www/site1/index.html
var/www/site1/page2.html
var/www/site1/page3.html
var/www/site1/images/img1.png
var/www/site1/images/img2.png
var/www/site1/subdir/index.html

তবে /var/www/site1নিষ্কাশনকে সহজ করার জন্য এবং অকেজো ধ্রুবক ডিরেক্টরি কাঠামো এড়ানোর জন্য আমি সংরক্ষণাগারটির মধ্যে ডিরেক্টরি এবং ফাইলের নাম ফাইল থেকে অংশটি সরিয়ে দিতে চাই । কখনই জানেন না, যদি আমি এমন জায়গায় ব্যাকআপযুক্ত ওয়েবসাইটগুলি বের করতে পারি যেখানে ওয়েব ডেটা সংরক্ষণ করা হয়নি /var/www

উপরের উদাহরণের জন্য, আমি চাই:

tar -tf site1.bz2
style.css
index.html
page2.html
page3.html
images/img1.png
images/img2.png
subdir/index.html

সুতরাং, আমি যখন নিষ্কাশন করব, তখন বর্তমান ডিরেক্টরিতে ফাইলগুলি বের করা হয় এবং পরে আমাকে এক্সট্রাক্ট করা ফাইলগুলি সরানোর দরকার হয় না, এবং যাতে উপ-ডিরেক্টরি কাঠামো সংরক্ষণ করা হয়।

stackoverflowওয়েবে এবং অন্যান্য জায়গাগুলিতে টার এবং ব্যাকআপ নেওয়া সম্পর্কে ইতিমধ্যে অনেকগুলি প্রশ্ন রয়েছে তবে তাদের বেশিরভাগই সম্পূর্ণ উপ-ডিরেক্টরি কাঠামো (সমতলকরণ) বাদ দেওয়ার জন্য বলেন বা নামগুলি প্রাথমিক / যোগ করুন বা মুছে ফেলুন (আমি ডন করি না ') টি বের করার সময় ঠিক কী পরিবর্তিত হয় তা জানেন), তবে আর নেই।

ম্যানুয়ালটিতে এখানে এবং সেখান থেকে পাওয়া কয়েকটি সমাধান পড়ার পরে আমি চেষ্টা করেছি:

tar -cjf site1.bz2 -C . /var/www/site1/
tar -cjf site1.bz2 -C / /var/www/site1/
tar -cjf site1.bz2 -C /var/www/site1/ /var/www/site1/
tar -cjf site1.bz2 --strip-components=3 /var/www/site1/

তবে তাদের কেউই আমার পছন্দ মতো কাজ করেনি। কেউ কিছুই করেন না, আবার কেউ কেউ সাব-ডিরেক্টরি সংরক্ষণাগারভুক্ত করেন না।

এটি ক্রোন দ্বারা চালু একটি ব্যাকআপ শেল স্ক্রিপ্টের অভ্যন্তরে, তাই আমি ভাল করে জানিনা, কোন ব্যবহারকারী এটি চালায়, কী পাথ এবং বর্তমান ডিরেক্টরিটি রয়েছে, তাই সর্বদা সর্বদা জন্য নিখুঁত পথ লেখার প্রয়োজন হয় এবং বর্তমান ডিরেক্টরিটি পরিবর্তন না করা পছন্দ করবেন স্ক্রিপ্টে আরও কিছু না ভাঙ্গতে (কারণ এটি কেবল ওয়েবসাইটগুলিই নয়, ডাটাবেসগুলি ব্যাকআপ করে, তারপরে এটি সমস্ত এফটিপিতে প্রেরণ করে)

কীভাবে এটি অর্জন করবেন?

অপশন-সি কীভাবে কাজ করে তা আমি কী ভুল বুঝেছি?



ওয়েল, -Cকেবলমাত্র "ডিরেক্টরি পরিবর্তন করুন" এর অর্থ একটি পাথ (বা উপসর্গ) প্রতিস্থাপন করার সময় কেবলমাত্র এর মাধ্যমে করা যেতে পারে --transform। Rif। superuser.com/questions/595510/prepend-prefix-in-tar/595512 আপনাকে সহজ -C (পরিবর্তন ডিরেক্টরি) এবং --transform পারেন: `` আলকাতরা cjf site1.bz2 --transform "S / ^ \ \। // $ টার্গেটবেস / "-সি / ভেরি / www / সাইট 1। `` `
ড্যানিয়েল ক্রুসিয়ানী

এটি একটি খুব ভাল প্রশ্ন এবং দুঃখের বিষয় এই তারিখের উত্তরগুলির কোনওটিই সন্তোষজনক নয়। আমরা এখনও কিছু জ্ঞানী ব্যক্তির কাছ থেকে শুনতে পেলাম না যে আমরা কীভাবে কেবল একটি একক ফাইল স্টাইল। CSS (উপরে উদাহরণস্বরূপ) মূল ডিরেক্টরি বা ডিরেক্টরি গাছের কোনও উল্লেখ ছাড়াই বর্তমান ডিরেক্টরিতে সরিয়ে ফেলতে পারি? আমি আমার বর্তমান ডিরেক্টরিটি অযাচিত নতুন গাছের কাঠামোর সাথে বিশৃঙ্খলা করতে চাই না। বছরের পর বছর ধরে অবহেলিত টার্বলকে মারাত্মক ঘাটতির মতো শোনাচ্ছে।
এলমক্লোজ

উত্তর:


382
tar -cjf site1.tar.bz2 -C /var/www/site1 .

উপরের উদাহরণে, টার /var/www/site1তার কাজ করার আগে ডিরেক্টরিতে পরিবর্তিত হবে কারণ বিকল্পটি -C /var/www/site1দেওয়া হয়েছিল।

থেকে man tar:

OTHER OPTIONS

  -C, --directory DIR
       change to directory DIR

152
শেষে ডট মিস্ করবেন না, যে জরুরী ;-)
Freedom_Ben

9
আপনি যদি একটি ওয়াইল্ডকার্ডের ভিত্তিতে ফাইলগুলি ব্যাকআপ করতে চান তবে কীভাবে? -সি / ভেরি / www / সাইট1 * .ড্যাট কাজ করে না :(
অ্যান্ডি লরেঞ্জ

16
ডটটি tarবর্তমান ডিরেক্টরিতে সমস্ত কিছু সংরক্ষণাগার করতে বলে । এবং -Cবর্তমান ডিরেক্টরি সেট করে।
লার্স ব্রিংকফ

21
এটি দুর্দান্ত কাজ করে। আমি ডিরেক্টরিটির নাম সংরক্ষণ করতে দরকারী মনে করি (পুরো পথটিই নয়), তাই আমি নিম্নলিখিতগুলি করলাম: tar -czvf site1.tar.gz -C /var/www/ site1(স্পেসটি নোট করুন, আমি প্যারেন্ট ডিয়ারের সিডি করতে এখনও সি-সি ব্যবহার করছি, এবং ডায়ারকে টার থেকে নির্দিষ্ট করে দিচ্ছি) বিন্দু পরিবর্তে)
জর্ফাস

9
আমি তারার পথে একটি শীর্ষস্থানীয় বিন্দু পেয়েছি যেমন এটি ./foldersকীভাবে সরানো যেতে পারে?
মিকা571

39

বিকল্পটি -Cকাজ করে; কেবল স্পষ্টতার জন্য আমি 2 টি উদাহরণ পোস্ট করব:

  1. সম্পূর্ণ পথ ছাড়াই একটি টারবাল তৈরি: পুরো পথ /home/testuser/workspace/project/application.warএবং আমরা যা চাই তা ঠিক project/application.warতাই:

    tar -cvf output_filename.tar  -C /home/testuser/workspace project

    দ্রষ্টব্য: workspaceএবং এর মধ্যে একটি স্থান রয়েছে project; ডাস্ট পুরো পথটিকে ন্যায়বিচারের সাথে প্রতিস্থাপন করবে project

  2. টার্গল নিষ্কাশন লক্ষ্য টার্গেটের পরিবর্তনের সাথে (ডিফল্ট ., অর্থাৎ বর্তমান ডিরেক্টরি)

    tar -xvf output_filename.tar -C /home/deploy/

    tarপ্রদত্ত পাথের উপর ভিত্তি করে সৃষ্টির পথ সংরক্ষণের ভিত্তিতে টারবাল আহরণ করবে; আমাদের উদাহরণে ফাইলটি এতে application.warসরানো হবে /home/deploy/project/application.war

    /home/deploy: প্রদত্ত নেভিগেশন দেওয়া
    project: টারবল তৈরির উপর দেওয়া

দ্রষ্টব্য: আপনি যদি তৈরি টার্বলকে একটি লক্ষ্য ডিরেক্টরিতে রাখতে চান তবে আপনি কেবল টারবাল নামের আগে লক্ষ্যের পথটি যুক্ত করুন। উদাহরণ:

tar -cvf /path/to/place/output_filename.tar  -C /home/testuser/workspace project

1
শেষ উদাহরণে ফাইল নির্বাচনের জন্য ওয়াইল্ডকার্ড কীভাবে যুক্ত করবেন?
শিভা

ওয়াইল্ডকার্ডগুলির সাথে সমস্যাটি হ'ল শেলটি তাদের মিলে যাওয়া ফাইলের নামগুলিতে প্রসারিত করে এবং যদি তারা উদ্ধৃত হয় তবে তারটি তাদের প্রসারিত করে না ...
Gert van den Berg

আমি এটি উবুন্টু 18.04 এ চেষ্টা করেছি এবং কোনও ভাগ্য নেই। আমি কী মিস করছি তা নিশ্চিত নই। আমার স্টাডাউট এটি সঠিকভাবে প্রদর্শন করছে যখন আমি এটি প্যাকেজ করি, তবে যখন আমি এটি অনার্স না করি তখনও এটির পুরো পথ রয়েছে
sdc

14

মনে হয় -Cআলকাতরা v2.8.3 পর্যন্ত বিকল্প সব প্ল্যাটফর্মের (অপারেটিং সিস্টেমের) এ ধারাবাহিকভাবে কাজ করে না। -Cবিকল্পটি সংরক্ষণাগারটিতে ডিরেক্টরি যুক্ত করার কথা বলা হয় তবে ম্যাক এবং উবুন্টুতে এটি উত্পন্ন টার.gz ফাইলের অভ্যন্তরে নিখুঁত পথের উপসর্গ যুক্ত করে।

tar target_path/file.tar.gz -C source_path/source_dir

সুতরাং সুসংগত এবং cdদৃ solution় সমাধান হ'ল সোর্স_পথ (উত্স_ডির পিতামহিত ডিরেক্টরি) এবং চালানো

tar target_path/file.tar.gz source_dir

অথবা

tar -cf target_path/file.tar.gz source_dir

আপনার স্ক্রিপ্টে এটি আপনার উত্পাদিত tar.gz ফাইলের ডিরেক্টরি কাঠামোয় পরম পথের উপসর্গটি সরিয়ে ফেলবে।


1
-সি বিকল্পের ব্যবহার ডিআইডি ফেডোরা ২৯-তে উত্পন্ন টার.gz ফাইলের অভ্যন্তরে নিখুঁত পাথ উপসর্গগুলি সরিয়ে দেয় your আপনার উত্তরটি কি কোনও সিস্টেমের সাথে সুনির্দিষ্ট?
EL_DON

@ এল_ডন: আমি ফেডোরায় সি-সি বিকল্প পরীক্ষা করিনি, তবে আদর্শভাবে টાર অ্যাপ্লিকেশন সফ্টওয়্যারটি প্রতিটি প্ল্যাটফর্মে ধারাবাহিকভাবে কাজ করা উচিত যদি না এটি টার অ্যাপ্লিকেশনটিতে বাগ হয়। -সি বিকল্পটি, আমি ম্যাক 10.8 এবং ম্যাক 10.13 এবং উবুন্টুতে পরীক্ষা করেছি (সংস্করণটি আমি মনে করতে পারি না)। তবে ট্যারি ভি ২.৮.৩ অনুসারে, কমান্ডটি টার-সিএফ টার্গেট_পথ / ফাইল.আর্টর সোর্স_ডিরে পরিবর্তন করা হয়েছে এবং এখনও যদি আপনি সি সি বিকল্প যুক্ত করেন তবে এটি উত্পন্ন টার.gz ফাইলের মধ্যে নিখুঁত পাথ উপসর্গটি সরিয়ে ফেলবে না।
চিন্তাকা সেনানায়াকা

আমি আবার সেন্টোস সিস্টেমে পরীক্ষা করেছি। উদাহরণে সমস্ত পাথ তৈরি করার পরে এবং কমান্ডটি চালানোর -cvfপরে ( পরে যোগ করা সহ tar), আমি দেখতে পেয়েছি যে ফলাফলযুক্ত.g.gz ফাইলটির অভ্যন্তরে পরম পাথ নেই, যা অন্যান্য বেশ কয়েকটি উত্তরের সাথে সামঞ্জস্যপূর্ণ। আপনি যদি মনে করেন যে আমি পরীক্ষার জন্য যে দুটি সিস্টেম ব্যবহার করেছি তার মধ্যে টারটি নষ্ট বা পুরানো হয়ে গেছে, দয়া করে এমন কিছু ডকুমেন্টেশনের সাথে লিঙ্ক করুন যা আপনার উত্তরটিকে সমর্থন করবে। আমি মনে করি -Cবিকল্পটি কার্যকর করার আগে ডিরেক্টরি পরিবর্তন করে (অন্যান্য জবাব হিসাবে)। আমি যখন এটি বাদ দিই, তার ./থেকে শুরু হওয়া পথগুলি সহ, রাস্তা থেকে জাঙ্ক যোগ করার চেষ্টা করে ./
EL_DON

আমি এই দস্তাবেজটি ব্যবহার করেছি: linux.die.net/man/1/tar হ্যাঁ, ডক বলেছেন যে -C পথ পরিবর্তন করবে, তবে আমার ম্যাক 10.13 এ এটি কাজ করছে না। এটি টার অ্যাপের অসঙ্গতিপূর্ণ আচরণ হতে পারে। তার মানে এটি একটি বাগ। আপনি যদি সমস্ত ইউনিক্স প্ল্যাটফর্মগুলিতে চালনার জন্য কোনও শেল স্ক্রিপ্ট লিখছেন তবে চলমান কোডের সাথে আরও নিরাপদ থাকুন যা সমস্ত ওএসে কাজ করবে।
চিন্তাকা সেনানায়াকা

আপনার উত্তরটি বলে না যে এখানে কোনও ত্রুটি থাকতে পারে এবং ক্রস-প্ল্যাটফর্মের সামঞ্জস্যের জন্য আরও দৃ solution় সমাধানটি cd। আপনার উত্তরটি বলে যে ডক্সটি কীভাবে এটি ব্যবহার করে এবং এটি কীভাবে এটি আমার সিস্টেমে কাজ করে তা উল্টো পথে কাজ করে so সুতরাং এটি একটি ভুল উত্তর। আপনি সহজেই এটি ঠিক করতে পারে।
EL_DON

7

নিম্নলিখিত কমান্ডটি মূল ডিরেক্টরি তৈরি করবে "। এবং নির্দিষ্ট ডিরেক্টরি থেকে সমস্ত ফাইল এতে রেখে দিন।

tar -cjf site1.tar.bz2 -C /var/www/site1 .

আপনি যদি সমস্ত ফাইল টর ফাইলের মূলের মধ্যে রাখতে চান তবে @ চিন্থাকা ঠিক আছে। কেবল ডিরেক্টরিতে সিডি করুন এবং করুন:

tar -cjf target_path/file.tar.gz *

এটি সিডাব্লুতে সমস্ত ফাইলকে রুট ফাইল হিসাবে ট্যারি ফাইলটিতে রাখবে।


1
* ব্যবহার করে কোনও "লুকানো" ফাইল বা। ফোল্ডার সংরক্ষণ হয় না। (এফআইআই, -সি একসাথে * ব্যর্থ হয়ে শেলটি বর্তমান দির প্রসারিত করে, -সি ডির নয়)
Xen2050

1

"পয়েন্ট" ব্যবহার করে "পয়েন্ট" নামে একটি ফোল্ডার তৈরি হয় (উবুন্টু 16 এ)।

tar -tf site1.bz2 -C /var/www/site1/ .

আমি আরও বিস্তারিতভাবে এটি মোকাবেলা এবং একটি উদাহরণ প্রস্তুত। মাল্টি-লাইন রেকর্ডিং, প্লাস একটি ব্যতিক্রম।

tar -tf site1.bz2\
    -C /var/www/site1/ style.css\
    -C /var/www/site1/ index.html\
    -C /var/www/site1/ page2.html\
    -C /var/www/site1/ page3.html\
    --exclude=images/*.zip\
    -C /var/www/site1/ images/
    -C /var/www/site1/ subdir/
/

কেন আপনি এটিকে "পয়েন্ট" বলছেন? এটি ঠিক ., যা বর্তমান ডিরেক্টরি। tar.gzকাঠামোর প্রসঙ্গে , এটি ঠিক বেস / মূল / শীর্ষ স্তরের, তাই না?
EL_DON

বিশদ চিত্রের জন্য স্ন্যাপশট দেখুন । আমার উপায়টি ব্যবহার করা আরও সঠিক, এটি আমার অভিমত।
সের্গেই আসাচেভ

0

আপনি যদি একটি উপ-ডিরেক্টরি আর্কাইভ করতে চান এবং সাব-ডিরেক্টরি ডিরেক্টরি ট্রিম করতে চান তবে এই আদেশটি কার্যকর হবে:

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