펄스크립트.pl

펄스크립트.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

펄스크립트.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;

원하는대로 스크립트 이름을 지정하십시오. 실행하려면 디렉터리(또는 디렉터리)를 샘플에 전달합니다. 인수를 지정하지 않으면 현재 작업 디렉터리가 사용됩니다.

관련 정보