Como filtrar links simbólicos repetidos

0

Eu tenho diferentes aliases de links simbólicos para um conjunto de arquivos (cuidado, alguns links simbólicos podem apontar para outros links simbólicos no mesmo diretório) e eu gostaria de obter uma lista de arquivos exclusivos para os quais eles estão apontando.

Exemplo:

alias_a1 -> alias_a2
alias_a2 -> /somedir/a
alias_b1 -> /somedir/b
alias_b2 -> /somedir/b
alias_c1 -> /somedir/c

No final, eu gostaria de ter /somedir/a /somedir/b /somedir/c para ser passado como argumentos para outro comando.

    
por fortran 08.12.2011 / 14:04

1 resposta

1

A função libc realpath() pode fazer a maior parte do trabalho resolvendo todos os links simbólicos; escreva um script semelhante a este para filtrar resultados exclusivos:

#!/usr/bin/env perl
use Cwd;
my %files = map {Cwd::realpath($_) => 1} @ARGV;
my @files = sort keys %files;

# This example will run: mycommand arg1 arg2 file1 file2 file3 arg3
system {"mycommand"} "mycommand", "arg1", "arg2", @files, "arg3";

A lista de arquivos é obtida dos argumentos da linha de comando.

uniquefiles.pl mydirectory/*
    
por 08.12.2011 / 14:24