Как найти все каталоги lib по пути Windows? - PullRequest
0 голосов
/ 01 декабря 2009

Я получаю результат "Файл не найден" при запуске сценария:

use File::Basename; 

my @dirs = grep { fileparse($_) =~ /^[L|l]ib/ } 

split /\n/, dir e:\\/ad/b/s; 

print @dirs; 

Это мой настоящий код. Я пытаюсь grep каталоги и подкаталоги, которые имеют имя lib или Lib на всем диске.

Ответы [ 2 ]

3 голосов
/ 01 декабря 2009

Если вы используете код из моего ответа на предыдущий вопрос , я могу думать только о том, что на вашем пути может быть какой-то внешний dir.exe, который не понимает параметры командной строки для cmd.exe встроенный dir. Например, с каталогами Cygwin на моем пути, я получаю

dir: cannot access /ad/b/s: No such file or directory

Вы должны также иметь привычку показывать точный результат, который вы получаете, если хотите, чтобы люди были способны помочь вам более эффективно.

Чтобы этого не случилось, используйте:

use strict; use warnings;

use File::Basename;

my @dirs = grep { fileparse($_) =~ /^[Ll]ib/ }
           split /\n/,  `cmd.exe /c dir e:\\ /ad/b/s`;

print "$_\n" for @dirs;

Обратите внимание на галочки `` `. Обратите внимание также на исправление используемого вами шаблона.

2 голосов
/ 01 декабря 2009

Любое количество вещей.

  • Я надеюсь, что вы используете обратные ссылки, которые теряются в вашем посте:
  • Но вам не нужно split, если вы используете обратные пометки, потому что он вернется в виде списка.
  • Я не думаю, что [L|l] означает то, что вы думаете, это значит. Если вы просто имеете в виду заглавную букву «L» или строчную букву «l», символ чередования не требуется. Правильное выражение - [Ll] (или (?i:l)ib, что означает, что мы локализуем i-флаг для группы.)

Итак, если это выглядит так:

 use File::Basename; 

 my @dirs = grep { fileparse($_) =~ /^[Ll]ib/ } qx{dir /AD /B /S e:\\};

Это должно работать, если есть что-нибудь , которое соответствует этому. Просто убедитесь, что вы используете оператор qx или обратные галочки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...