Use um script pequeno dentro de outro no AIX, ou uma solução em um único comando

0

Eu quero colocar em um pequeno script (perl-script.pl) dentro de outro, a fim de usá-lo com um comando find , assim:

#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-script.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;
}

Em suma, eu gostaria de usar este comando find sem ter que importar de outro script - ou, como posso fazer isso usando um único comando?

    
por Filipe Torres 25.10.2018 / 16:48

1 resposta

1

Se você quiser que um script totalmente contido colete os atributos de propriedade e permissão do conteúdo de um diretório para possível recuperação, esse script pode ser usado:

#!/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;

Nomeie o script como você quiser. Para executar, passe o diretório (ou diretórios) que você deseja amostrar. Se nenhum argumento for especificado, o diretório de trabalho atual será usado.

    
por 25.10.2018 / 22:14