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\]/*"