Perl: Как получить доступ ко всем и только к подкаталогам? - PullRequest
0 голосов
/ 11 сентября 2011

Я пытаюсь написать сценарий Perl, который выполняет предварительный просмотр каталога.Мне нужно, чтобы получить все подкаталоги данного каталога, включая скрытые.К сожалению, когда я пытаюсь сделать что-то подобное:

<$ dir / * $ dir /.*>

... ". *" Вызывает "."и ".." также будет возвращено, и это испортит мою функцию, потому что это вызывает бесконечный цикл.Как получить только подпапки $ dir, как обычные, так и скрытые, и не текущий или каталог верхнего уровня?

Например, если моя папка"dir" и содержит следующие подкаталоги:

hello
.hiddendir
"dir с пробелом в имени"
". скрытый dir с пробелом в имени"
dir2

... Я хочу получить массив только с этими, а не с "."или "..".

Мне все равно, отображаются ли файлы, потому что я использую "if (-d $ dir)" позже.Есть ли способ проверить, равен ли элемент в массиве globbed текущему каталогу или родительскому каталогу, чтобы я мог исключить их?

Спасибо

Ответы [ 3 ]

4 голосов
/ 12 сентября 2011
perl -MFile::Find::Rule -E'
   say
      for
         File::Find::Rule->directory->in(".");'

или

perl -MFile::Find::Rule -E'
   say
      for
          grep $_ ne ".",
             File::Find::Rule->directory->in(".");'

File :: Find :: Rule

1 голос
/ 12 сентября 2011

Функция read_dir в File :: Slurp автоматически исключает . и .. по умолчанию.

1 голос
/ 11 сентября 2011

Просто используйте grep для фильтрации.и .. каталоги:

grep { !/^\.{1,2}$/ } <$dir/* $dir/.*>
...