2つのフォルダーのコンテンツの所有者とアクセス許可を比較しますか?


10

2つのフォルダーのコンテンツの所有者とアクセス許可を比較するにはどうすればよいですか?diff2つのフォルダーを再帰的に比較し、所有者と権限の違いを表示するコマンドのようなものはありますか?

回答:


11

解決策は、すべてのものと同様に、perlスクリプトです。

#!/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.htmlhttp://perldoc.perl.org/File/Find.html詳細は、特にためにstatあなたが他のファイルの属性を比較したい場合は1。

ファイルがdirectory2に存在せず、directory1に存在する場合は、ファイルstatが異なるため、そこにも出力されます。


許可をUNIXスタイルで印刷したい場合は、次のようにすると便利ですprintf ("Permissions for %s and %s are not the same (%04o != %04o)\n", $file1, $file2, $mode1 &07777, $mode2 &07777) if ( $mode1 != $mode2);
Marcus、

3

検索と統計:

find . -exec stat --format='%n %A %U %G' {} \; | sort > listing

それを両方のディレクトリで実行してから、2つのリストファイルを比較します。

Perlの悪からあなたを救います...


1
次に、結果を
比較し

1

2つのフォルダがある程度再帰的に同じであることを確認しますか?そのためのrsyncコマンドは非常に強力だと思います。

あなたの場合あなたは実行することができます:

rsync  -n  -rpgov src_dir dst_dir  
(-n is a must otherwise dst_dir will be modified )

異なるファイルまたはフォルダーがコマンド出力としてリストされます。

man rsyncこれらのオプションの詳細については、を参照してください。


上記のコマンドでsrc_dirの代わりにsrc_dir /を使用すると、その内容はdst_dirの内容にマッピングされるだけになります)
Bill Zhao

0

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

3列目は所有者、4列目はグループです。


えーと、tempとtemp2の内容はどうですか?
cjc 2012年

2つの方法:2つのシェルを開いて両方のフォルダーに移動して同じls -alコマンドを実行するか、1つのシェルでtmuxを実行するか、1つのフォルダーに移動してコマンドを他のフォルダーに移動し、同じコマンドを再度実行します。
Lucas Kauffman

2
このソリューションは拡張できません。
Artem Russakovskii

0

2つのディレクトリが同じ構造でありtree、インストールされている場合は、次のようにしてディレクトリを比較できます。

diff <(tree -ap parent_dir_1) <(tree -ap parent_dir_2)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.