Рекурсивный список файлов в CLI Linux с указанием пути относительно текущего каталога - PullRequest
211 голосов
/ 29 октября 2008

Это похоже на этот вопрос , но я хочу включить путь относительно текущего каталога в unix. Если я сделаю следующее:

ls -LR | grep .txt

Не включает полные пути. Например, у меня есть следующая структура каталогов:

test1/file.txt
test2/file1.txt
test2/file2.txt

Приведенный выше код вернет:

file.txt
file1.txt
file2.txt

Как я могу заставить его включать пути относительно текущего каталога, используя стандартные команды Unix?

Ответы [ 13 ]

1 голос
/ 27 ноября 2009

Вот скрипт Perl:

sub format_lines($)
{
    my $refonlines = shift;
    my @lines = @{$refonlines};
    my $tmppath = "-";

    foreach (@lines)
    {
        next if ($_ =~ /^\s+/);
        if ($_ =~ /(^\w+(\/\w*)*):/)
        {
            $tmppath = $1 if defined $1;    
            next;
        }
        print "$tmppath/$_";
    }
}

sub main()
{
        my @lines = ();

    while (<>) 
    {
        push (@lines, $_);
    }
    format_lines(\@lines);
}

main();

использование:

ls -LR | perl format_ls-LR.pl
0 голосов
/ 23 апреля 2019

В оболочке fish вы можете сделать это для рекурсивного вывода списка всех PDF-файлов, в том числе в текущем каталоге:

$ ls **pdf

Просто удалите «pdf», если вы хотите файлы любого типа.

0 голосов
/ 13 апреля 2014

Вы можете реализовать эту функцию следующим образом
Во-первых, команда ls указала на целевой каталог. Позже с помощью команды find отфильтруйте результат. С вашего случая это звучит так - всегда имя файла начинается со слова file***.txt

ls /some/path/here | find . -name 'file*.txt'   (* represents some wild card search)
...