উত্তর:
সমাধান, সমস্ত কিছুর মতোই পার্ল স্ক্রিপ্ট:
#!/usr/bin/perl
use File::Find;
my $directory1 = '/tmp/temp1';
my $directory2 = '/tmp/temp2';
find(\&hashfiles, $directory1);
sub hashfiles {
my $file1 = $File::Find::name;
(my $file2 = $file1) =~ s/^$directory1/$directory2/;
my $mode1 = (stat($file1))[2] ;
my $mode2 = (stat($file2))[2] ;
my $uid1 = (stat($file1))[4] ;
my $uid2 = (stat($file2))[4] ;
print "Permissions for $file1 and $file2 are not the same\n" if ( $mode1 != $mode2 );
print "Ownership for $file1 and $file2 are not the same\n" if ( $uid1 != $uid2 );
}
এ http://perldoc.perl.org/functions/stat.html এবং http://perldoc.perl.org/File/Find.html আরও তথ্য, বিশেষ করে এর জন্য stat
এক যদি আপনি অন্যান্য ফাইল বৈশিষ্ট্যাবলী তুলনা করতে চাই।
যদি ফাইল ডিরেক্টরি 2 তে বিদ্যমান না থাকে তবে ডিরেক্টরি 1 তে উপস্থিত থাকে তবে আউটপুটও থাকবে কারণ stat
ভিন্ন হবে।
সন্ধান করুন এবং স্থিতি:
find . -exec stat --format='%n %A %U %G' {} \; | sort > listing
দুটি ডিরেক্টরিতে এটি চালান এবং তারপরে দুটি তালিকাভুক্ত ফাইলের তুলনা করুন।
পারেলের কুফল থেকে আপনাকে বাঁচায় ...
আপনি কি নিশ্চিত হন যে 2 ফোল্ডারগুলি কিছুটা হলেও একই রকম হওয়া উচিত? আমি মনে করি rsync
কমান্ড এটির জন্য খুব শক্তিশালী।
আপনার ক্ষেত্রে আপনি চালাতে পারেন:
rsync -n -rpgov src_dir dst_dir
(-n is a must otherwise dst_dir will be modified )
কমান্ড আউটপুট হিসাবে বিভিন্ন ফাইল বা ফোল্ডার তালিকাভুক্ত করা হবে।
আপনি man rsync
এই বিকল্পগুলির আরও সম্পূর্ণ ব্যাখ্যার জন্য দেখতে পারেন ।
ls -al
অনুমতিগুলি প্রদর্শন করবে, যদি উভয়ই একই ফোল্ডারে থাকে তবে আপনি এই জাতীয় কিছু পাবেন:
drwxr-xr-x 4 root root 4096 nov 28 20:48 temp
drwxr-xr-x 2 lucas 1002 4096 mrt 24 22:33 temp2
তৃতীয় কলামটি মালিক, চতুর্থটি গ্রুপ।
printf ("Permissions for %s and %s are not the same (%04o != %04o)\n", $file1, $file2, $mode1 &07777, $mode2 &07777) if ( $mode1 != $mode2);