펄스크립트.pl

펄스크립트.pl

Linux에서는 다음 명령을 사용하여 이 출력을 표시합니다.

 find /backup/$INSTANCE/tsm/* -exec echo '"{}" ' \; | xargs stat --printf "chown %U:%G '%n'\nchmod %a '%n'\n" >> /tmp/permissions.txt

이 명령은 다음 출력을 반환합니다.

[filipe@filipe ~]$ cat /tmp/permissions.txt  
chown filipe:filipe '/backup/filipe/tsm/1347123200748.jpg' 
chmod 766 '/backup/filipe/tsm/1347123200748.jpg'

AIX에서 istat 명령을 사용하여 동일한 출력을 생성하려면 어떻게 해야 합니까?

간단히 말해서, istat에서 읽은 파일에 대해 chmod 및 chown 명령이 포함된 재귀적 출력이 필요합니다.

답변1

를 사용 find하되 원하는 명령을 출력하는 Perl 스크립트에 파일 이름을 직접 전달하십시오.

find /backup/"$INSTANCE"/tsm/* -exec /path/to/perl-script.pl {} +

작은따옴표가 포함된 파일 이름에 주의하세요! 작은따옴표를 포함하도록 인쇄된 파일 이름을 수정했습니다.

펄스크립트.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", $s[4], $s[5], $filename, ($s[2] & 07777), $filename;
}

uid 및 gid 대신 텍스트 사용자 및 그룹 이름을 선호하는 경우 get* 조회 기능을 사용하십시오.

...
  printf "chown %s:%s '%s'\nchmod %04o '%s'\n", (getpwuid($s[4]))[0], (getgrgid($s[5]))[0], $filename, ($s[2] & 07777), $filename;
...

예제 출력:

chown 1000:1001 '/backup/myinstance/tsm/everyone-file'
chmod 0666 '/backup/myinstance/tsm/everyone-file'
chown 1000:1001 '/backup/myinstance/tsm/file'\''withquote'
chmod 0644 '/backup/myinstance/tsm/file'\''withquote'
chown 1000:1001 '/backup/myinstance/tsm/perl-script.pl'
chmod 0755 '/backup/myinstance/tsm/perl-script.pl'
chown 1000:1001 '/backup/myinstance/tsm/secure-file'
chmod 0600 '/backup/myinstance/tsm/secure-file'
chown 1000:1001 '/backup/myinstance/tsm/setuid-file'
chmod 4755 '/backup/myinstance/tsm/setuid-file'
chown 1000:1001 '/backup/myinstance/tsm/some-dir'
chmod 0755 '/backup/myinstance/tsm/some-dir'

관련 정보