比较两个文件夹的内容的所有者和权限?


10

如何比较两个文件夹的内容的所有者和权限?是否有类似diff命令之类的东西,可以递归比较两个文件夹并显示所有者和权限差异?

Answers:


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如果要比较其他文件属性的信息。

如果目录2中不存在文件,但目录1中存在文件,则也会输出,因为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

在两个目录中运行该文件,然后比较两个列表文件。

从Perl的邪恶中拯救您...


1
然后只是比较结果:)
CrazyMerlin '19

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

第三列是所有者,第四列是组。


嗯,temp和temp2的内容如何?
cjc 2012年

两种方式:打开2个shell进入两个文件夹并执行相同的ls -al命令,或使用tmux进行1个shell或仅进入一个文件夹将命令转到另一个文件夹并再次执行相同的命令。
卢卡斯·考夫曼

2
该解决方案将无法扩展。
Artem Russakovskii

0

如果两个目录具有相同的结构并且已tree安装,则可以通过执行以下操作来对目录进行区分:

diff <(tree -ap parent_dir_1) <(tree -ap parent_dir_2)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.