perl - 如何使用 Perl 的 File::Find::Rule 模块查找具有 777 权限的文件

标签 perl rules

我想使用 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/

相关文章:

linux - 珀尔 : background process not running because of print statement

ruby - 删除文件中第二个文件中没有匹配项的行的最快方法是什么?

caching - 如何清除节点队列的 Varnish 缓存?

perl - 将数组放在 => 运算符的右侧会发生什么?

python - 使用 win32com 模块的 Python 2.7 中的 Qualcomm QPST 自动化服务器

perl - Excel::Writer::XLSX 单元格(带有日期和时间)需要刷新

.net - 在为规则引擎创建 DSL 时使用什么技术?

java - 客户端和服务器端规则引擎?

odoo 覆盖对象的组权限

jquery - 类中包含的 CSS 规则不适用于 div