ফাইলগুলি সরান এবং আরএসসিএনসি দিয়ে ডিরেক্টরিগুলি মুছবেন?


17

সম্প্রতি আমার প্রচুর পরিমাণে ফাইল মুছে ফেলতে হবে (1 মিলিয়নেরও বেশি) এবং আমি এটি করে পড়েছি:

rsync -av --delete `mktemp -d`/ ~/source && rmdir ~/source

এটি করার একটি অন্যতম অনুকূল উপায় ছিল এবং আমি এটিকে আরও দ্রুততর করে তুলতে পারি rm -rf

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

rsync -av --ignore-existing --remove-source-files ~/source ~/destination

এই সব সরানো মুছে ফেলে যদিও ফাইল মধ্যে ~/source, ডিরেক্টরি সেখানে রয়ে গেছে। যেহেতু আমার কাছে "রাউন্ড-রবিন" -র মতো ডিরেক্টরি কাঠামো রয়েছে এটির সংখ্যার files/directoriesখুব কাছে 1, সুতরাং ডিরেক্টরিটি সম্পূর্ণরূপে ছাড়ানোর জন্য আমি আবার প্রথম কমান্ড চালাতে বাধ্য হচ্ছি:

rsync -av --ignore-existing --remove-source-files ~/source ~/destination && \
rsync -av --delete `mktemp -d`/ ~/source && rmdir ~/source

একটি সরল mvকার্যত তাত্ক্ষণিকভাবে শেষ হবে, তবে আমার ~/destinationডিরেক্টরিতে এমন ফাইল রয়েছে যা রাখা উচিত, তাই mvকোনও বিকল্প নয়। আমি দেখেছি --prune-empty-dirsএবং --forcersync বিকল্প, কিন্তু কেউই কাজ বলে মনে হচ্ছে আমি আশা:

--force                 force deletion of directories even if not empty
--prune-empty-dirs      prune empty directory chains from the file-list
--remove-source-files   sender removes synchronized files (non-dirs)

এক সাথে এক সাথে আর আর সিএনসি দিয়ে চাল নকল করার উপায় আছে কি ?


2
যদি আপনি এখানে কোনও উত্তর না পান তবে আরএসসিএনসি তালিকায় পোস্ট করার চেষ্টা করুন। তারা খুব সহায়ক। list.samba.org/mailman/listinfo/rsync
জো

উত্তর:


7

আমি স্ট্যাকওভারফ্লো শিরোনামে এই থ্রেডটি পেয়েছি: আরএসসিএনসি "মুভ" দিয়ে ফোল্ডারগুলি মোছা হচ্ছে? , যা মূলত একই প্রশ্ন জিজ্ঞাসা করছে। উত্তরগুলির rsyncমধ্যে একটি ইন 2 কমান্ড করার পরামর্শ দেয় কারণ এটি প্রদর্শিত হয় এমন কোনও একক কমান্ড নেই যা ফাইল এবং উত্স ডিরেক্টরিগুলি সরানো / অপসারণ করতে পারে।

$ rsync -av --ignore-existing --remove-source-files source/ destination/ && \
  rsync -av --delete `mktemp -d`/ source/ && rmdir source/

বিকল্পভাবে আপনি এই আদেশটি ব্যবহার করে এটি করতে পারেন:

$ rsync -axvvES --remove-source-files source_directory /destination/ && \
  rm -rf source_directory

আদর্শ নয় তবে কাজটি করে।


হ্যাঁ, আমিই সেই প্রশ্নের উত্তর দিয়েছিলাম (এবং একই "সমাধান" এই প্রশ্নের মধ্যেও রয়েছে)। = পি
অ্যালিক্স অ্যাক্সেল

@ অ্যালেক্সএক্সেল - হা, দুঃখিত, আমি উত্তর দিইনি যে আপনি উত্তরটি দিয়েছিলেন। আচ্ছা ভালো. আমি কি তাহলে এই উত্তরটি মুছব?
slm

3
rsyncডিরেক্টরি ছাঁটাইতে ব্যবহার করা সঠিক মনে হয় না এবং সর্বদা বিপদ থাকে rm -rf। : আমি 2nd পদক্ষেপ বলতে চাই হতেfind source/ -d -type d -exec rmdir {} \;
ভাঁড়

2
আমি কেবল যুক্ত করতে, কখনও ব্যবহার করতে -deleteএবং --remove-source-filesএকক rsync কমান্ডে বাধ্য হতে পারি না (উপরের উদাহরণগুলি ভাল, এটি স্পর্শকাতর)। যদি আপনি বাধা দেন তবে আমি যা বর্ণনা করছি তা পুনরায় কার্যকর করুন, আপনি স্থানান্তরিত ফাইল হারাবেন। যা আমি এর আগে করেছি :(
শ্রীধর সারনোবাত

পরিষ্কার করার সময় find, আমি এটিকে পছন্দ করি: find source/ -type d -empty -delete এটি আমাকে আশ্বাসের এক অদ্ভুত অনুভূতি দেয় যে এটি কেবল সবকিছুই আঁটসাঁট করে না।
গ্রেফ্যাড

10

জ্যানির মন্তব্য থেকে স্ল্যামের উত্তরে ( ফাইলগুলি সরান এবং আরএসসিএনসি দিয়ে ডিরেক্টরিগুলি মুছুন? ) আমি উত্তর হিসাবে এই 2 টি আদেশের সুপারিশ করব:

rsync -av --ignore-existing --remove-source-files source/ destination/ && \
find source/ -depth -type d  -empty -exec rmdir "{}" \;

সুবিধাটি হ'ল, জ্যানির মতোই, আরএম-আরএফ ব্যবহার না করার ক্ষেত্রে এখনও কিছু বিপদ জড়িত রয়েছে যদি আপনি এটি সঠিকভাবে না পান বা নতুনদের জন্য করেন।

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


শুধু -deleteপরিবর্তে কেন -exec rmdir {} \;?
উড়ন্ত ভেড়া

@flying_sheep সিম এর উত্তরে user7000 এর মন্তব্য দেখুন: যখন rsync IST বিঘ্নিত আপনি ফাইল আলগা পারে
MIT

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

এছাড়াও ম্যান পেজগুলি বলেছে যে আপনার উচিত এক্সেকের পরিবর্তে এক্সেক্সিডির ব্যবহার করা উচিত ...
বেনবা

2

এটি এক ধাপে কাজ করে। উত্স এবং লক্ষ্য উভয় পথেই অনুসরণ / স্ল্যাশ / নোট করুন।

rsync \
    -ruval \
    --ignore-existing \
    --remove-source-files \
    --prune-empty-dirs \ 
    /source/path/ /target/path/

আমি user7000 থেকে নয় ব্যবহারের সাবধানতা echo --deleteএবং --remove-source-filesএকসঙ্গে একই কলে rsync। যদি অপারেশন ব্যর্থ হয় বা বাধাপ্রাপ্ত হয় এবং একই কলটি পুনরাবৃত্তি হয়, আপনি ডেটা হারাবেন। যদি কোনও সন্দেহ --dry-runহয় তবে কী করা হবে তা দেখার জন্য বিকল্পটি ব্যবহার করুন ।


-ruvalঅপ্রয়োজনীয় মনে হচ্ছে -aসমান -rlptgoD, যা উভয় -rএবং অন্তর্ভুক্ত -l
গ্রেফ্যাড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.