আমি কীভাবে ইউনিক্সে একটি নির্বাচনী গভীর অনুলিপি কমান্ডটি দ্রুত করতে পারি?


3

আমি (আব?) ইউনিক্স 'ফাইন্ড' কমান্ডটি ব্যবহার করে .svn ডিরেক্টরিতে লিখিত একটি ডিরেক্টরি ট্রি থেকে পুনরুক্তরূপে ফাইল রফতানি করতে চাইছি। এই কমান্ডটি চালাতে দীর্ঘ সময় নেয়। একই জিনিসটি সম্পাদন করার আরও দ্রুত উপায় আছে?

find source/ -type f -and ! -path '*.svn*' -and -exec cp {} export \;

আমি যা করতে চাই তা হ'ল ডিরেক্টরি ট্রি থেকে শুরু হওয়া প্রতিটি উপ-ডিরেক্টরিটি অনুসন্ধান source/করা এবং সেই ডিরেক্টরিগুলির exportযে কোনও ফাইল ডিরেক্টরিতে অনুলিপি করা, .svn ডিরেক্টরিতে থাকা কোনও ফাইলকে এড়িয়ে যাওয়া is


আপডেট: (সম্পূর্ণ সমাধান, মাইকা Šরাজের পোস্ট করা উত্তরের ভিত্তিতে ):

find source/ -type f -and ! -path '*.svn*' -and -print0 | xargs -0 \
    cp --target-directory=export

যারা কৌতূহলী তাদের জন্য: উইকিপিডিয়ায় xargs

উত্তর:


2

যদি আপনি rsyncjhcaised উত্তর (+1) হিসাবে ব্যবহার করতে না পারেন তবে আপনি এটি বেশ কয়েকটি উপায়ে করতে পারেন:

  1. একের সাথে ডিরেক্টরি অনুলিপি করুন cp -rএবং তারপরে -delete` ব্যবহার করে সমস্ত .svn ডায়ার সরান find . -name .svn`
  2. পাইপ এক tar cঅন্য tar x। তার আছে--exclude=

আপনি আপনার কোডটিও অনুকূলিত করতে পারেন। মনে রাখবেন যে আপনি cpপ্রতিটি ফাইলের জন্য কল করেছেন। এটি দীর্ঘ সময় নেয়। আপনি ব্যবহার করতে পারেন -print0এবং xargs -0। এটি আরও দ্রুত হবে।


আপনার ব্যবহারের পরামর্শ -print0এবং xargs -0সুন্দরভাবে কাজ করেছে। ধন্যবাদ!
জেমস

@ ই জেমস: আপনাকে স্বাগতম
মাইচা Šরাজের

2

আপনি rsync ব্যবহার করে একই ফাইলগুলি অনুলিপি করে এড়াতে পারবেন, কমান্ডটি এমন হবে:

আরএসআইএনসি উত্স / এক্সপোর্ট / - এক্সক্লুড '* .এসভিএন'

যদি আপনার উত্স থেকে মুছে ফেলা ফাইলগুলি রফতানি থেকে অপসারণ করতে হয় তবে কমান্ডটিতে - ডিলিট পরামিতি যুক্ত করুন।


+1, কিন্তু এটি কি ডিরেক্টরি কাঠামো সংরক্ষণ করবে? আমি চেষ্টা করছি যে কাঠামোটি সংরক্ষণ না করা। যেমন exportকোনও সাব-ডিরেক্টরি অন্তর্ভুক্ত করা উচিত নয়, কেবলমাত্র ফাইলের একটি বড় তালিকা
জেমস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.