perl脚本.pl

perl脚本.pl

我想在另一个脚本中放置一个小脚本(perl-script.pl),以便将其与命令一起使用find,如下所示:

#Saving the previous permission information for a possible recovery.
case "$STAND" in
        n|N|nao|no"")
        find /backup/"$INSTANCE"/tsm/* -exec /path/to/perl-script.pl {} + >> /tmp/permissions.txt
        chmod u+x /tmp/permissions.txt
    ;;
        s|S|y|Y|sim|yes)
        [... below code is similar of above]
    ;;
esac

perl脚本.pl

!/usr/bin/env perl -w
use strict;
for (@ARGV) {
  my @s = stat;
  next unless @s; # silently fail on to the next file
  my $filename = $_;
  $filename =~ s/'/'\\''/g;
  printf "chown %s:%s '%s'\nchmod %04o '%s'\n", (getpwuid($s[4]))[0], (getgrgid($s[5]))[0], $filename, ($s[2] & 07777), $filename;
}

简而言之,我想使用这个 find 命令而不必从另一个脚本导入 - 或者,我如何使用单个命令来做到这一点?

答案1

如果您想要一个完全包含的脚本来收集目录内容的所有权和权限属性以进行可能的恢复,可以使用此脚本:

#!/usr/bin/env perl
use strict;
use warnings;
use File::Find;
sub wanted {
    my ( $mode, $uid, $gid ) = ( stat($_) )[ 2, 4, 5 ];
    printf "chown %s:%s '%s'\n", $uid, $gid, $File::Find::name;
    printf "chmod %04o '%s'\n", $mode & 07777, $File::Find::name;
    return;
}
my @dir = @ARGV ? @ARGV : '.'; # use current directory unless told
find( \&wanted, @dir );
1;

将脚本命名为您想要的任意名称。要运行,请传递要采样的目录(或多个目录)。如果未指定参数,则使用当前工作目录。

相关内容