নতুন নামের ডিরেক্টরিতে একটি ডিরেক্টরিকে কীভাবে আলাদা নামে যুক্ত করবেন?


49

আমি একটি ডেটা ট্রান্সফার করছি, পুরানো ফাইল সিস্টেম গভীরভাবে একটি ডিরেক্টরিতে নির্ভর করে যা এখন বিভিন্ন পথে চলছে। এটি একটি গিট ডিরেক্টরি যা অনলাইনে কোড সঞ্চয় করে। এটি সরানোর বা নতুন নামকরণের আমার কোনও অধিকার নেই।

সুতরাং আমি যা করতে পারি তা হ'ল এই ডিরেক্টরিটিকে একই পুরানো পথে y তবে ডিরেক্টরিটির নামও পরিবর্তিত হয়েছে।

কোনও সহজ উপায় আছে যে আমি কোনও ডিরেক্টরিকে একটি ভিন্ন নামের সাথে একটি ডিরেক্টরি ডিরেক্টরিতে আরএসসিএন করতে পারি?

উত্তর:


83

আপনি যদি rsyncপুনরাবৃত্তভাবে destডিরেক্টরিটিকে ডিরেক্টরিটির একটি অনুলিপি করতে ব্যবহার করতে চান src:

rsync -a src/ dest

rsyncMan পৃষ্ঠা ব্যাখ্যা করে কিভাবে এই কাজ করে:

উত্সটিতে একটি পিছনে স্ল্যাশ [...] [গুলি] গন্তব্যে একটি অতিরিক্ত ডিরেক্টরি স্তর তৈরি করা এড়াতে। আপনি /"উত্স অনুসারে ডিরেক্টরিটি অনুলিপি করুন" এর বিপরীতে "এই ডিরেক্টরিতে থাকা বিষয়বস্তুগুলি অনুলিপি করুন" হিসাবে উত্সের পিছনের কথা ভাবতে পারেন [...]


3
এটি একটি তৈরি করবে srcঅধীনে ডিরেক্টরির destডিরেক্টরির
জেন

7
@ জেন, rsyncআমি কখনও ব্যবহার করেছি এমন কোনও সংস্করণে নেই । যদি এটি সত্যিই আপনার সাথে ঘটে থাকে তবে আপনি উত্স ডিরেক্টরি আর্গুমেন্টের শেষে ট্রেলিং স্ল্যাশ মিস করছেন।
অ্যাড্রিয়ান

3
সেই
স্নিগ্ধ

দুর্ভাগ্যক্রমে এটি কাজ করে না বলে মনে হয় যদি destএটি একটি সিএমএনএনকে হয় তবে srcএটির পরিবর্তে অনুলিপিটি শেষ srcহয় src/src। ম্যাকোজে পরীক্ষিত। আশা করছিলাম যে আমি এটির bar -> foo/সাথে প্রতিস্থাপন করতে পারি bar/তবে একটি মধ্যবর্তী অস্থায়ী ডিরেক্টরি ব্যবহার করতে হয়েছিল ।
ব্যবহারকারী5359531

@ user5359531 আপনি যদি জানেন যে destএটি srcকেবলমাত্র rm destউপরের কমান্ডটি চালানোর আগে একটি সিমিলিংক । এর বিষয়বস্তু অনুলিপি rsyncকরার destআগে তৈরি করতে যথেষ্ট স্মার্ট src। আপনার কোনও মধ্যবর্তী টেম্প ডাইর দরকার নেই।
এড্রিয়ান

1

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

প্রতীকী লিঙ্কটি ব্যবহার করা একটি এককালীন ফিক্স যা দুটি ডিরেক্টরি মিরর করবে (বিভিন্ন নাম সহ) এবং প্রায় কোনও স্থানের প্রয়োজন নেই। এটি এমন একটি عرف ডিরেক্টরি তৈরির মতো যা অন্য ডিরেক্টরিকে নির্দেশ করে।

ধরা যাক আপনার / old / path / old_git নামক ডিরেক্টরিতে পুরানো গিট ছিল এবং এখন কোড সংগ্রহস্থলটি / new / path / new_git এ চলে গেছে

আপনি করতে পারেন:

cd /old/path
rm -rf old_git     (if you still have it there, get rid of it, or move it out of the way)  
ln -s /new/path/new_git old_git

এটি এর মতো একটি লিঙ্ক তৈরি করবে:

/ পুরাতন / পাথ / পুরানো_গীত -> / নতুন / পাথ / নতুন_গিত

যাতে নতুন_গিটের মধ্যে যে কোনও কিছু রাখা হয় তা তাত্ক্ষণিকভাবে পুরানো উপায়ে উপলব্ধ হবে, ডেটা ডুপ্লিকেট না করে এবং ক্রমাগত সেগুলি সিঙ্ক না করে।


1
Rm -rf পুরাতন_গিট কমান্ডটি সম্পর্কে সতর্কতা অবলম্বন করুন। এটি আপনার সম্পূর্ণ পুরানো_গিট সংগ্রহস্থান সরিয়ে ফেলবে। আমি যদি আপনার সমস্যাটি সঠিকভাবে বুঝতে না পারি তবে এটি একটি খারাপ জিনিস হতে পারে।
জারেল

0

আমি এখন একটি বিকল্প সমাধান খুঁজে।

ব্যবহার rysnc -r /origin/* /target/করে লক্ষ্য ডিরেক্টরিতে মূল বিষয়বস্তু থেকে সমস্ত সামগ্রী সিঙ্ক করতে পারে।


8
আমি বিশ্বাস করি এটির মধ্যে ডট (.foo) ফাইল অন্তর্ভুক্ত নেই কারণ এগুলি নক্ষত্রের সাথে মেলে না
রে বুর্গমিস্ট্রে

যা শেল গ্লোব প্রসারণের উপর নির্ভর করে, প্রযুক্তিগতভাবে এটি সেখানে পাওয়া প্রতিটি ফাইলকে আরএসসিএনকে যুক্তি হিসাবে পাস করবে। এটি প্রায় চলমান একই rsync -r $(find /origin -maxdepth 1 -type f) /target/ । @ রায়বার্গেমেস্ট্রে যেমন উল্লেখ করেছেন, শেল গ্লোব সম্প্রসারণে ডট ফাইল অন্তর্ভুক্ত থাকবে না।
ফ্লোরিয়ান ক্যাসটেলেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.