উত্তর:
এটি নিম্নলিখিত শেল লাইনের সাহায্যে করা যেতে পারে:
D1=foo; D2=foo2; for entry in $(find $D1 -exec stat -f "%N:%Mp%Lp" {} \;); do $(echo $entry | sed 's#'$D1'#'$D2'#' | awk -F: '{printf ("chmod %s %s\n", $2, $1)}') ; done
কেবলমাত্র D1 এবং D2 ভেরিয়েবলের জন্য সঠিক মান সেট করুন, উত্স এবং গন্তব্য ডিরেক্টরিতে তাদের নির্দেশ করুন, রান করুন এবং ডায়ারদের সিঙ্কে অনুমতি থাকবে।
আমি এটি সম্পাদন করার জন্য একটি নতুন এবং সহজ উপায় শিখেছি:
getfacl -R /path/to/source > /root/perms.acl
এটি সমস্ত অনুমতি এবং মালিকানা সহ একটি তালিকা তৈরি করবে।
তারপরে গন্তব্যের উপরে এক স্তরে যান এবং এর সাথে অনুমতিগুলি পুনরুদ্ধার করুন
setfacl --restore=/root/perms.acl
উপরের এক স্তরের আপনাকে যে কারণটি হতে হবে তা হ'ল পারমস.একএল এর সমস্ত পাথ আপেক্ষিক।
রুট হিসাবে করা উচিত।
getfacl
এবং setfacl
অগত্যা সমস্ত সিস্টেমে উপস্থিত নেই।
.ac
প্রথম কমান্ডে এবং .acl
দ্বিতীয়টিতে থাকা কি সঠিক ?
যদি আপনার উত্স এবং গন্তব্য থাকে তবে আপনি নিজের অনুমতিগুলি এর সাথে সিঙ্ক্রোনাইজ করতে পারেন
rsync -ar --perms source/ dest
এটি ডেটা স্থানান্তর করবে না, কেবল অনুমতিগুলি ...
-r
এন্ড --perms
রিডানডান্ট, তবে এটি এখনও সিঙ্ক হয় যদি তারা কেবলমাত্র আলাদা জিনিস হয় (যা আপনি প্রশ্নে যা বলেছেন; গাছগুলি আসলে অভিন্ন না হলে আপনাকে বলা উচিত ছিল না যে তারা ছিল)।
একটা বিষয়ে তোমার কাজ করতে পারে ব্যবহার খোঁজ কমান্ড কমান্ডগুলি আপনাকে অনুমতি কপি দরকার, তাদের সাথে একটি স্ক্রিপ্ট নির্মাণ করতে। এখানে একটি চটজলদি উদাহরণ, আপনি মালিক, গ্রুপ আইডি, ইত্যাদি সহ বিভিন্ন প্রিন্টফ বিকল্পগুলির সাথে আরও অনেক কিছু করতে পারেন।
$ find /var/log -type d -printf "chmod %m %p \n" > reset_perms
$ cat reset_perms
chmod 755 /var/log
chmod 755 /var/log/apt
chmod 750 /var/log/apache2
chmod 755 /var/log/fsck
chmod 755 /var/log/gdm
chmod 755 /var/log/cups
chmod 2750 /var/log/exim4
...
দুটি উপায়:
(পরবর্তী ক্ষেত্রে / ডিএসটি অবশ্যই উপস্থিত থাকতে পারে)
সম্পাদনা: দুঃখিত, আমি ভুল পড়েছি। আপনি যা চেয়েছিলেন তা নয়।
আমি মনে করি এটি করার জন্য আমি পার্ল স্ক্রিপ্ট লিখব। কিছুটা এইরকম:
#!/usr/bin/perl -nw
my $dir = $_;
my $mode = stat($dir)[2];
my $pathfix = "/some/path/to/fix/";
chmod $mode, $pathfix . $dir;
তারপরে এমন কিছু করুন:
cd /some/old/orig/path/ ; find . -type d | perlscript
আমি এটি আমার মাথার উপরের অংশে লিখেছিলাম, এবং এটি পরীক্ষা করা হয়নি; সুতরাং এটি এলোমেলোভাবে চালানোর আগে এটি পরীক্ষা করে দেখুন। এটি কেবল বিদ্যমান ডিরেক্টরিতে অনুমতিগুলি স্থির করে; এটি ফাইলগুলিতে অনুমতি পরিবর্তন করবে না, এটি অনুপস্থিত ডিরেক্টরিগুলি তৈরি করবে না।
আমি এটি নিয়ে এসেছি:
find $SOURCE -mindepth 1 -printf 'chmod --reference=%p\t%p\n'|sed "s/\t$SOURCE/ $DEST/g"|sh
এটি পুরোপুরি বুলেট প্রমাণ নয়, তবে আমার যা প্রয়োজন তা করে।