ফাইল অনুমতিগুলি অনুলিপি করুন, তবে ইউনিক্সে ফাইল নয়


14

(প্রেরণ: /programming/15245144/copy-file-perifications-but-not-files , অফ-টপিক বন্ধ থাকায়)

আমার কাছে একই ডিরেক্টরি গাছের দুটি কপি রয়েছে। তাদের প্রায় উভয়ই একই ফাইল রয়েছে (একটি সংস্করণে কয়েকটি অতিরিক্ত বা অনুপস্থিত ফাইল থাকতে পারে)। তবে বেশিরভাগ ফাইলই উভয় ডিরেক্টরিতে সাধারণ (একই রকমের পাথ এবং সব কিছু রয়েছে)।

ধরুন এগুলি ডিরেক্টরিতে রয়েছে:

version1/
version2/

সমস্যাটি হ'ল সংস্করণ 1 / এ থাকা অনুমতিগুলি গণ্ডগোল পেয়েছে এবং আমি সংস্করণ 2 / থেকে অনুমতিগুলি অনুলিপি করতে চাই, তবে সংস্করণ 1 / এ নতুন ফাইলগুলি প্রতিস্থাপন না করে এটি করুন।

শেল কমান্ড বা স্ক্রিপ্টগুলির মাধ্যমে এটি করার কোনও স্বয়ংক্রিয় উপায় নেই?


এখানে সেখানে Perl একটি দরকারী স্ক্রিপ্ট যা আপনি ব্যবহার করতে পারেন serverfault.com/questions/373058/...
NoNoNo

উত্তর:


15

জিএনইউ সিপি --attributes-onlyপতাকাটি কোরআউটিলগুলি 8.6 থেকে জানে

--অ্যাট্রিবিউটস-কেবলমাত্র ফাইলের ডেটা অনুলিপি করবেন না, কেবলমাত্র বৈশিষ্ট্যগুলি


1
আমার সংস্করণটিতে এই পতাকাটি আছে বলে মনে হচ্ছে না এবং উদাহরণস্বরূপ
shearn89

14

আমার সংস্করণ cpনেই --attributes-onlyতাই আমি এই পর্যন্ত কাজ করেন, পতাকা। সংক্ষেপে সাধারণ ফোল্ডারগুলিতে, ওয়াইএমএমভিতে পরীক্ষা করা।

$> ls
version1/
version2/
$> ls -l version1/1/a
-rw-rw-r-- 1 alex alex 0 Feb  5 12:49 version1/1/a
$> ls -l version2/1/a
-rwxrwxrwx 1 alex alex 0 Feb  5 12:49 version1/1/a

$> find version1 -type f -printf '%P\n' | xargs -I {} \
    chmod --reference=version1/{} version2/{}

$> ls -l version2/1/a
-rw-rw-r-- 1 alex alex 0 Feb  5 12:49 version1/1/a

5

আপনি পারেন, তবে আমি "স্বয়ংক্রিয় পদ্ধতিতে" মনে করি না!

--reference=RFILEআপনি ব্যবহার করতে পারেন এমন GNU chown এবং GNU chmod এর একটি প্যারামিটার রয়েছে।

chown --reference=RFILE yourfile
chmod --reference=RFILE yourfile

এটি RFILEসেটিংস (অনুমতি, মালিক, গোষ্ঠী, ইত্যাদি) ব্যবহার করে এবং সেগুলিতে অনুলিপি করে yourfile

ম্যানুয়ালটি আরও বিস্তারিতভাবে ব্যাখ্যা করে।


0

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

cd version1/
find . -exec stat -c '%a %n' "{}" \; > setPerm.sh
vi setPerm.sh

"Vi" এর মধ্যে আমি সমস্ত লাইনগুলিতে "chmod" কমান্ড সন্নিবেশ করলাম: %s/^/chmod /g আমি স্ক্রিপ্টটি version2/ডিরেক্টরিতে অনুলিপি করে সম্পাদন করেছি।

অন্যান্য সমাধানগুলি বৈধ বলে মনে হচ্ছে তবে আমি সেগুলি পরীক্ষায় নিই না।


0

মারিয়ানো পানিগার জবাব থেকে অনুপ্রাণিত হয়ে আমার মনে হয় আমার কাছে আরও ভাল আছে, তার জন্য কমান্ডগুলি vi এবং অনুসন্ধান / প্রতিস্থাপনের দরকার নেই। এমনকি আমি মালিকানার তথ্যও অনুলিপি করতে চাই (uid / gid)।

cd version1/
find . -exec stat -c 'chmod %a %n; chown %U:%G %n' "{}" \; > /tmp/setPerm.sh
chmod u+x /tmp/setPerm.sh
cd ../version2
/tmp/setPerm.sh

আপনি যে stat -c '...'কোনও কিছু চাইলে কমান্ডগুলি কাস্টমাইজ করতে পারেন। সমস্ত উপলব্ধ বিকল্পের জন্য, দেখুন man stat


আপনার স্ক্রিপ্ট এম্বেড করা নতুনলাইনগুলির সাথে নামগুলি পরিচালনা করে?
হরিণ শিকারি

@ হরিণ-শিকারি এটি যেমনটি কাজ করা উচিত, যদি তা না হয় তবে আপনি ফাইলনাম অংশের চারপাশে ".." একটি উদ্ধৃতি যোগ করতে পারেন।
টোমোফুমি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.