У меня есть разные псевдонимы символических ссылок для набора файлов (будьте осторожны, некоторые символические ссылки могут указывать на другие символические ссылки в том же каталоге), и я хотел бы получить список уникальных файлов, на которые они указывают.

Пример:

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

В конце я хотел бы, чтобы /somedir/a /somedir/b /somedir/c передавался в качестве аргументов другой команде.

1 ответ1

1

Функция libc realpath() может выполнять большую часть работы, разрешая все символические ссылки; напишите скрипт, похожий на этот, чтобы отфильтровать уникальные результаты:

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

Список файлов берется из аргументов командной строки.

uniquefiles.pl mydirectory/*

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .