glob не распознает имя файла в квадратных скобках

у меня есть папка, ее название:

drwxr-xr-x.  2 user user       4096 Aug  2 18:30 folder name [www.website.com]

но когда я использую шар, как это:

my @files = glob ("/home/user/Downloads/folder name [www.website.com]/*");
print "@files/n";

он не перечисляет файлы в каталоге, результат следующий:

/home/user/Downloads/folder name

Я попытался избежать пробелов и квадратных скобок, как это:

/home/user/Downloads/folder name [www.website.com]

но результат тот же, что может быть моей ошибкой или что может сделать, чтобы улучшить мой код?

спасибо заранее

2 ответов


строение glob функция разбивает шаблоны на пробелы. Таким образом, Вы делаете что-то эквивалентное

my @files = (
  glob("/home/user/Downloads/folder"),
  glob("name"),
  glob("[www.website.com]/*"),
);

выход из пробела и скобок будет одним из вариантов. Но лучше использовать ядро File::Glob модуль для более точного управления:

use File::Glob ':bsd_glob';

my @files = bsd_glob("/home/user/Downloads/folder name \[www.website.com\]/*");

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


космосы и квадратные brackers специальны в картинах глобуса. Чтобы соответствовать

/home/user/Downloads/folder name [www.website.com]

вам нужно

/home/user/Downloads/folder\ name\ \[www.website.com\]

таким образом, полная картина

/home/user/Downloads/folder\ name\ \[www.website.com\]/*

построить эту строку, вы можете использовать строковый литерал

"/home/user/Downloads/folder\ name\ \[www.website.com\]/*"