我想使用 perl File::Find::Rule 在服务器中查找具有 perms 777 的文件
我知道该模块有统计测试,所以我可以简单地这样做:
$rule->mode(33279)
假设 File::Find::Rule 取小数点,我通过创建一个文件并在其上打印权限找到了 33279?还是应该以某种方式格式化?
这是让所有文件完全具有 777 权限的正确方法吗?
这是一个在测试服务器的主目录中查找所有文件的脚本。我想更改它,以便它只查找具有 777 权限的文件。
#!/usr/bin/perl
use strict;
use warnings;
use File::Find::Rule;
my $rule = File::Find::Rule->new;
$rule->file;
$rule->name( '*' );
my @files = $rule->in( "/root" );
for my $file (@files) {
my $mode = (stat $file)[2];
printf ("%04o %s\n",$mode & 07777, $file);
}
最佳答案
mode
包括文件权限和类型。您需要屏蔽它,以便您只获得权限位。我个人会实现自定义规则:
use warnings;
use strict;
use File::stat;
use Fcntl qw/S_IMODE/;
use File::Find::Rule 'rule';
my $rule = rule->file->exec(sub{ S_IMODE(stat($_[2])->mode)==0777 });
my @files = $rule->in('/root');
for my $file (@files) {
print $file, "\n";
}
请注意,此屏蔽模式仍包含 setuid/setgid/sticky 位(通常称为 Xst
)。如果你也想忽略那些,只检查 ugo
/rwx
位,那么你必须屏蔽 0777
(例如 $mode & 0777
)。
关于perl - 如何使用 Perl 的 File::Find::Rule 模块查找具有 777 权限的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54192198/