লিনাক্স - পুনরাবৃত্তভাবে লুকানো ফাইলগুলি অনুলিপি করা হচ্ছে


19

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

cp -R .* directory

তবে এটি সমস্ত অ গোপনীয় ফাইলও স্বীকৃত .এবং ..পুনরাবৃত্তভাবে অনুলিপি করে। উপেক্ষা করার জন্য সিপি পাওয়ার কোনও উপায় আছে .এবং ..?


-rএবং এর মধ্যে কোনও পার্থক্য আছে কি -R?
চামিন্দা বান্দারা

উত্তর:


15

আমার সাধারণত ডায়ার সরাতে পছন্দ করা হয়েছে:

tar cvf - . | (cd /dest/dir; tar xvf -)

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

tar cvf - .* --exclude=\. --exclude=\.\. | (cd /dest/dir; tar xvf -)

1
ধন্যবাদ, বাদ দেওয়ার বিকল্পটি আমার যা প্রয়োজন তা হল। আমি ইতিমধ্যে এটি অন্য উপায়ে সম্পন্ন করেছি, তবে আমি এটি ভবিষ্যতের রেফারেন্সের জন্য রেখে দেব। এটি সত্যিই নমনীয় বলে মনে হচ্ছে (যদিও এটি ধীর হতে পারে)।
জিফ্রে

1
সদুপদেশ. আমার কয়েকটি উন্নতি হয়েছে: 1) ব্যবহার করুন cd /dest/dir && tar xvf -&&সোর্স ডিরেক্টরিতে উপর blatting আপনি গন্তব্য একটি টাইপো আছে থেকে বন্ধ করে দেব। 2) আপনার কেবল vটার কমান্ডগুলির মধ্যে একটিতে টারার পতাকা লাগবে (বা না)।
টম শ

যথেষ্ট ফর্সা। আমি অন্যান্য উপায়ে গোষ্ঠীগুলি সম্পর্কেও পরিচিত ছিলাম: এখানে একটি রিমোট সিআরসিডির অনুলিপি করতে, করুন(cd /src/dir && tar cf - .) | tar xvf -
pjz

17

প্রায় প্রতিবারই এটির মাধ্যমে সমাধান করা যেতে পারে:

cp -R .[a-zA-Z0-9]* directory

এমন কোনও লুকানো ফাইল থাকা খুব অস্বাভাবিক, যা সেই চরিত্রগুলির মধ্যে একটির সাথে শুরু হয় না।

অন্যান্য প্যাটার্নের মিলগুলি পাওয়া যায় ( .??*, .[^.]*) - মন্তব্যগুলি দেখুন


এটি কেবল।-Xyz উপেক্ষা করবে - [] এর স্টাফগুলি কেবল বিন্দুর পরে প্রথম অক্ষরের সাথে মেলে।
হামিশ ডাউনার

6
। [^।] * সমস্ত কিছু ধরবে
ফলস্ট্রো

1
... দুটি পিরিয়ড দিয়ে শুরু করা জিনিস বাদে।
ফ্যালাস্ট্রো

@roe - যে একটা চমৎকার সংস্করণ খুব
ঊষা

@ মিশ - হ্যাঁ, আমি উত্তরে যতটা বলেছি
Alnitak

11

আপনি ব্যবহার করতে পারে rsync

rsync -a ./ /some/other/directory/

এটি বর্তমান ডিরেক্টরিতে (ডট ফাইল সহ তবে অন্তর্ভুক্ত নয় ..) বিষয়বস্তু অনুলিপি করবে


সহজ, এবং লুকানো ফোল্ডারে লুকানো ফাইলগুলির জন্যও কাজ করে।
ব্যবহারকারী59183

আমার জন্য এটি প্রদত্ত সমাধানগুলির মধ্যে কম বিভ্রান্তিকর এবং সবচেয়ে কার্যকর
প্যালারডট

সুন্দর সমাধান। আমার .gitএটিরও দরকার ছিল যে এটি কপি না করে rs -C যোগ করার ফলে এটি কমান্ডটি হয়ে যায়:rsync -aC ./ /some/other/directory/
21:38

10

আমি আপনাকে অনুরোধ করছি, cpকমান্ড লাইনে সরল শেল প্রসার থেকে দূরে সরে যান - শেল প্রসারণে সব ধরণের আহেম "আকর্ষণীয়" কোণার কেস রয়েছে (এবং অ্যান্ডেন্টেড পুনরাবৃত্তি, এবং .., ফাঁকা স্থান, মুদ্রণযোগ্য স্টাফ, হার্ডলিঙ্কস, প্রতীকী লিঙ্কগুলি এবং findপরিবর্তে ব্যবহার করুন) (এটি findutilsপ্যাকেজে আসে , যদি আপনি এটি ইনস্টল না করে থাকেন - যা অদ্ভুত হবে, সমস্ত বিতরণ এটি ডিফল্টরূপে ইনস্টল করে):

find -H /path/to/toplevel/dir/ -maxdepth 1 -name '.*' -a \( -type d -o -type f -o -type l \) -exec cp -a '{}' /path/to/destination/dir/ \;

ধাপে ধাপে ব্যাখ্যা:

  • -Hfindসিমলিংকগুলি অনুসরণ না করার কারণ ঘটবে (আপনি যে প্রকৃত শীর্ষ স্তরের ডিরেক্টরি নামটি দিয়েছেন এটি একটি সিমিলিংক ব্যতীত; এটি অনুসরণ করবে))
  • /path/to/toplevel/dir/ স্পষ্টতই, আপনি যে ডিরেক্টরিটি সেটিংস ফাইল এবং ডিরেক্টরিগুলি ব্যাক আপ করতে চান সেগুলি হোস্ট করে এমন ডিরেক্টরিটি দিয়ে আপনার দ্বারা প্রতিস্থাপিত হওয়ার কথা।
  • -maxdepth 1findযার নাম বিন্দু দিয়ে শুরু হয় এমন কোনও ডিরেক্টরিতে পুনরাবৃত্তভাবে নেমে যাওয়া বন্ধ হবে । আমাদের এটি পুনরাবৃত্তি করার দরকার নেই, এটি cpআমাদের জন্য করবে, আমাদের কেবলমাত্র এই স্তরের নামগুলি দরকার।
  • -name '.*'বলে findযে আমরা সমস্ত নাম চাই যা বিন্দু দিয়ে শুরু হয়। পরিবেশের পরিবর্তনশীল POSIXLY_CORRECTসেট করা থাকলে এটি সঠিকভাবে কাজ করবে না তবে এটি খুব কমই (যদি কখনও হয়) হয়। এটি এখন পর্যন্ত আমরা উল্লেখ করা প্রথম ম্যাচের শর্ত।
  • a \( ....... \)এটি বন্ধনীগুলির আরও জটিল শর্ত এবং তারপরে (আমি এটি ব্যবহার করার জন্য ..... ব্যবহার করেছি, এটি নীচে ব্যাখ্যা করা হয়েছে)) আমাদের বন্ধনীর হাত থেকে বাঁচতে হবে যেহেতু তারা অন্যথায় শেল দ্বারা ব্যাখ্যা করা হবে, অতএব তাদের সামনে ব্যাকস্ল্যাশ,
  • -type d -o -type f -o -type lএকটি বা তাদের মধ্যে তিনটি শর্ত । -type dডিরেক্টরি -type fমেলে, নিয়মিত ফাইলের সাথে -type lমেলে এবং সিমলিংকের সাথে মেলে। আপনি যা চান তা নির্বাচন করতে পারেন - উদাহরণস্বরূপ, আপনি যদি সেটিংস ডিরেক্টরিগুলি ব্যাকআপ করতে না চান তবে বাদ দিন -type d(এবং এর -oঠিক পিছনে ডানদিকে স্পষ্টভাবে।)
  • -exec ..... \;findপ্রতিবার কোনও ম্যাচের মুখোমুখি হওয়ার সাথে সাথে কমান্ড কার্যকর করতে বলে । কমান্ডের শেষটি একটি সেমিকোলন দ্বারা চিহ্নিত করা হয়, যা শেল ব্যাখ্যাটি এড়াতে আমাদের আবার একটি ব্যাকস্ল্যাশ দিয়ে পালাতে হবে। সেই কমান্ড লাইনের মধ্যেই আপনি {}বর্তমানে যেখানে মুখোমুখি ম্যাচের নামটি শেষ করতে চান সেখানে ব্যবহার করতে হবে। যেহেতু শেল এছাড়াও কোঁকড়া ধনুর্বন্ধনী ভুল ব্যাখ্যা পারে, আপনি, অ্যাপস্ট্রফিগুলি তাদের স্থান হওয়া উচিত যেমন '{}'। এই ক্ষেত্রে আমরা যে আদেশটি কার্যকর করতে চাইছি তা হ'ল cp -a '{}' /path/to/destination/dir/(-এর অর্থ সংরক্ষণাগার, যা সাব-ডিরেক্টরিতে পুনরাবৃত্তি করে, লিঙ্ক হিসাবে সিমলিংকগুলি অনুলিপি করে এবং অনুমতি এবং বর্ধিত বৈশিষ্ট্য সংরক্ষণ করে এবং /path/to/destination/dir/স্পষ্টতই গন্তব্য ডিরেক্টরিটির নাম - এটি প্রতিস্থাপন করুন))

সুতরাং, সরল ইংরেজিতে, এই findকমান্ড লাইনটি এটি বলে:

/ পথে / থেকে / শীর্ষে / দির / এ শুরু করুন। কোনও উপ-ডিরেক্টরিতে নামবেন না। যার নাম বিন্দু দিয়ে শুরু হয় এমন সমস্ত ডিরেক্টরি, ফাইল এবং প্রতিলিঙ্কগুলি সন্ধান করুন। আপনি যে সকল সন্ধান পেয়েছেন তাদের প্রত্যেকের জন্য, এটি / পাথ / টু / গন্তব্য / দির / সংরক্ষণ প্রকৃতি, অনুমতি এবং বর্ধিত বৈশিষ্ট্যগুলিতে অনুলিপি করুন।


1
সর্বাধিক দরকারী জিনিস খুঁজে পেতে।
মিঃ শাইনি এবং নিউ 宇

1
চমৎকার উত্তর. যদিও আমি নির্ধারণ করতে পছন্দ করি ... ';' ব্যাকস্ল্যাশ এড়ানো মানে এই কমান্ডটি সিএলআই এবং
ক্রোনটব

8

"না পেয়ে লুকানো ফাইলগুলি সন্ধান করতে আমি সর্বদা ব্যবহার করেছি। ?? *" এবং "..". এটি ".এ" বা অন্য কোনও কিছু মিস করতে পারে তবে আমি এর মধ্যে একটিও পাই নি।


অবশ্যই সুন্দর এবং
ঝরঝাক

আমি চাই না যে এটি রহস্যজনকভাবে ব্যর্থ হয় যদি কিছু "
.a

আমি এটি পছন্দ করি কারণ আপনি যদি জানেন যে আপনার কাছে কোনও একক অক্ষরের গোপন ফাইল নেই তবে এটি টাইপ করা সত্যিই দ্রুত।
পল টমবলিন 21

এটি সেরা উত্তর হতে হবে। এটি শীর্ষে আপভোট করা উচিত।
ইবনে সাইদ

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