অনুমতি সংরক্ষণ না করে কীভাবে একটি ফাইল সরানো যায়


42

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

এমভি: ownership /home/blah/backup/pgsql.tar.gz 'এর মালিকানা সংরক্ষণে ব্যর্থ: অপারেশন অনুমোদিত নয়

তাই আমি ভালো কিছু চাই: mv $backupfile $destination --ignore-permissions

ব্যাকআপ ফাইলটি 1 এমআইবি থেকে 5 জিবিবি পর্যন্ত যে কোনও হতে পারে এবং এনএফএসের মাধ্যমে স্থানান্তরিত হয়।


এটি সংযুক্ত এনটিএফএস ডিভাইসেও ঘটে তবে এটি কেবলমাত্র ঘটনা নয়। সমস্ত ক্ষেত্রে এটি ঘটে যখন আপনি অনুমতি পরিবর্তন করার অধিকার না পেয়ে বা এটি সম্ভব না (এনটিএফএসের মতো)।
Nux

অনুমতি ত্রুটির কারণে ফাইলগুলি কোনওভাবে সরিয়ে না নেওয়ার চেষ্টা করার সময় এটি কার্যকর হয় (উদাহরণস্বরূপ যে তারা মাউন্ট করা হয়েছে cifs)।
শ্রীধর সারনোবাত

উত্তর:


56

mvএই কাজের জন্য ভুল সরঞ্জাম; আপনি চান cpএবং তারপর rm। যেহেতু আপনি ফাইলটিকে অন্য একটি ফাইল সিস্টেমে নিয়ে mvযাচ্ছেন ঠিক সেভাবেই পর্দার আড়ালে যা করা mvহচ্ছে , তা বাদে ফাইল অনুমতি বিট এবং মালিক / গ্রুপের তথ্য সংরক্ষণ করার চেষ্টা করা হচ্ছে। কারণ mvএটি সেই তথ্য সংরক্ষণ করে যদি এটি একই ফাইল সিস্টেমের মধ্যে একটি ফাইল সরিয়ে রাখে mvএবং উভয় পরিস্থিতিতে একই পদ্ধতিতে আচরণ করার চেষ্টা করে। যেহেতু আপনি ফাইল অনুমতি বিট এবং মালিক / গ্রুপের তথ্য সংরক্ষণের বিষয়ে চিন্তা করেন না, তাই সেই সরঞ্জামটি ব্যবহার করবেন না। ব্যবহার করুন cp --no-preserve=modeএবং rmপরিবর্তে।


5
ধন্যবাদ, এটি কাজ করে। শেষ হয়ে গেল:, cp --no-preserve=mode,ownership $backupfile $destinationপ্রস্থান কোডটি চেক করুন এবং তারপরে rm $backupfileসবকিছু ঠিকঠাক থাকলে করুন।
Nux

22

আপনি যখন একই ফাইল সিস্টেমের মধ্যে কোনও ফাইল স্থানান্তর করেন, mvতখন ফাইলটিকে তার পুরানো অবস্থান থেকে আলাদা করে তার নতুন অবস্থানে সংযুক্ত করে; অনুমতিগুলির মতো মেটাডেটা একই থাকে। আপনি যখন কোনও ফাইলকে অন্য কোনও ফাইল সিস্টেমে স্থানান্তরিত করেন, ফাইলটি mvঅনুলিপি করেন, যথাসম্ভব মেটাডেটা প্রতিলিপি করার চেষ্টা করেন এবং মূলটি সরিয়ে ফেলুন।

যেহেতু আপনি একটি আলাদা ফাইল সিস্টেমে চলেছেন এবং আপনি খুব বেশি মেটাডেটা প্রতিলিপি করতে চান না, আপনি সেই ফাইলটি অনুলিপি করে তারপরে মূলটি সরিয়ে ফেলতে পারেন।

cp "$backupfile" "$destination" && rm "$backupfile"

এটি কিছু পরিমাণে ফাইলের অনুমতি সংরক্ষণ করে (যেমন ওয়ার্ল্ড-রিডিবিলিটি, এক্সিকিউটেবিলিটি)। ফাইলটির পরিবর্তনের সময়টি সংরক্ষণ করা হয়নি। জিএনইউcp দিয়ে আপনি --preserve=…মেটাডেটা আরও সূক্ষ্মভাবে প্রতিলিপি করা হয়েছে এমন কনটোল করার বিকল্পটি ব্যবহার করতে পারেন , যেমন --preserve=mode,timestamps

আপনি rsyncকী সংরক্ষণ করতে চান তাও এটি ব্যবহার করতে এবং বলতে পারেন। বিকল্পটির -aঅর্থ হল "সর্বাধিক মেটাডেটা সংরক্ষণ করুন", যার মালিক যদি কেবল রুট হিসাবে চলমান থাকে includes

rsync -a --no-owner --no-group --remove-source-files "$backupfile" "$destination"

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

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