다음과 같은 명령과 함께 사용하기 위해 다른 스크립트 안에 작은 스크립트(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;
원하는대로 스크립트 이름을 지정하십시오. 실행하려면 디렉터리(또는 디렉터리)를 샘플에 전달합니다. 인수를 지정하지 않으면 현재 작업 디렉터리가 사용됩니다.