আরএসওয়াইএনসি উত্স ডিরেক্টরি মুছে না


27

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

এটি উত্স সার্ভারের ফাইলগুলি সাফল্যের সাথে মুছে ফেলবে, তবে খালি ডিরেক্টরিগুলি এখনও রয়ে গেছে। আমি কোনও বার্তা বা ত্রুটি পাই না। সমস্ত আউটপুট স্বাভাবিক। সম্ভবত এটি উদ্দেশ্যমূলক কার্যকারিতা।

ডিরেক্টরিগুলি সহ সমস্ত কিছু পরিষ্কার করার জন্য আমি কীভাবে RSSync কে বলতে পারি?

rsync --progress -vrzh --remove-source-files

উভয় প্রান্তে সংস্করণটি 3.0.9।


উত্তর:


13

--remove-source-filesআপনি যে আচরণটি পর্যবেক্ষণ করছেন সেটি হ'ল man rsync:

--remove সোর্স ফাইল

   This tells rsync to remove from the sending side the files (meaning non-directories) that are a part of the transfer and have been successfully duplicated on the receiving side.

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

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

এই দুটি পোস্টে কমান্ডের শেষ অংশটি পরামর্শ দিয়েছে,

 rmdir source/

এই পোস্টগুলিতে (এখন খালি করা) সোর্স ডিরেক্টরিতে এই ফর্মটি রয়েছে যা অপসারণের জন্য প্রয়োজনীয় কারণ ওপি এবং উত্তরগুলি একই মেশিনের মধ্যে বৃহত পরিমাণে ফাইল সরিয়ে নিতে আরএসসিএনসি ব্যবহার করছে। আপনার ক্ষেত্রে আপনাকে এটি ম্যানুয়ালি করতে হবে।


5
rsync --deleteপরামর্শ বিপজ্জনক, কারণ এটি সম্ভাবনা উপেক্ষা করে যে rsync সম্পন্ন না হয়েছে, অথবা উৎস নতুন ফাইল আছে। findনীচে @ slhck এর পদ্ধতিটি অনেক বেশি নিরাপদ।
সাই

29

ম্যানপেজ এমনকি বলে:

--remove-source-files   sender removes synchronized files (non-dirs)

আপনি যদি আপনার উত্সের খালি ডিরেক্টরিগুলি সরাতে চান, যদি এখনও ফাইলগুলি বাকী থাকে তবে একটি করুন:

find . -depth -type d -empty -delete

তবে একটি খালি রুট ডিরেক্টরি জন্য, একটি rm -rf <directory>ইচ্ছা অবশ্যই যথেষ্ট।


5
হ্যাঁ, এটিই একমাত্র সমাধান। এটি rsync এর এক নিখুঁত অনুপস্থিত বৈশিষ্ট্য ... এটি একটি ডিরেক্টরিতে শেষ ফাইলটি প্রক্রিয়া করার সময় আরএসএনসি জানে ... দিরটি খালি থাকলেও মুছে ফেলা সহজ।
এরিক অ্যারোনস্টি

4
সাবধান থাকুন যে "আরএম-আরএফ" জারি করা রেস-কন্ডিশন প্রবণ এবং আমি এটিকে নিরুৎসাহিত করি।
রাউল সালিনাস-মন্টেইগুডো

বৈকল্পিক যা শীর্ষ স্তরের খালি ডিরেক্টরিটি find some_dir -depth -type d -empty -not -path some_dir -delete
মুছবে না

5

" আরএম-আরএফ " ব্যবহারের অন্তর্নিহিত রেসের শর্ত রয়েছে, আপনি নামগুলি কেবলমাত্র আরএসইএনসি এবং আরএম ইনভোকেশনের মধ্যে তৈরি করা ফাইলগুলি মুছতে পারেন ।

আমি ব্যবহার করতে পছন্দ করি:

rsync - সরু-উত্স-ফাইল -a সার্ভার: ইনকামিং / ইনকামিং / এবং&

ssh সার্ভারটি ইনকামিং-টাইপ ডি-ডিলিট সন্ধান করে

ডিরেক্টরিগুলি খালি না হলে এটি সরবে না।


2
rm -rfএছাড়াও ফাইল কিছু কারণে স্থানান্তরিত করা হয় নি মুছে ফেলা হবে।
ক্রিশ্চিয়ান

1
এই উত্তরটি সেই -depthবিকল্পটি মিস করেছে যা findসঠিক ক্রমে প্রক্রিয়া করার জন্য নির্দেশ দেয়। এই মিসের ফলস্বরূপ, যে ডিরেক্টরিগুলিতে কেবল খালি ডিরেক্টরি থাকে (সম্ভবত পুনরাবৃত্তভাবে) মুছে ফেলা হবে না। @ এসএলএইচএইচসি দ্বারা বৈকল্পিকটি ঠিক আছে।
স্টাফেন গ্যারিচন

1

-m, --prune-empty-dirs ফাইল তালিকা থেকে খালি ডিরেক্টরি চেইন ছাঁটাই

--force খালি না থাকলেও ডায়ারগুলি মুছতে বাধ্য করুন


1
এটি খালি ডায়ারগুলি অনুলিপি করা থেকে আরএসসিএনকে বাধা দেয়। এটি খালি ডায়ারগুলি মুছে দেয় না।
নবীন

1

উত্স ফাইলগুলি সরান, তারপরে নিরাপদ থাকতে ডিরেক্টরিগুলি সরান।

# given this scenario where you generate folders 2014-01-01 etc.. that have an archive myfile.tar.gz
pushd $(mktemp -d)
mkdir 201{4..6}-{01..12}-{01..31}
for i in $(ls); do; touch $i/myfile.tar.gz;done;
# find and rsync on 10 CPU threads directories that match ./2015-*
find /tmp/tmp.yjDyF1jN70/src -type d -name '2015-*' | \
parallel \
--jobs 10 \
--progress \
--eta \
--round-robin \
rsync \
--hard-links \
--archive --verbose --protect-args \
--remove-source-files \
{} /tmp/tmp.yjDyF1jN70/dest
# now safely remove empty directories only
for i in $(ls /tmp/tmp.yjDyF1jN70/src); do; rmdir /tmp/tmp.yjDyF1jN70/src/$i; done;

আরো গনুহ সমান্তরাল

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