Выполните команду ls с * в имени - PullRequest
3 голосов
/ 02 августа 2011

Я хотел бы выполнить команду ls для файла с именем вроде / var / local / tmp / foo *. Я пытался использовать

%x[ls "#{path]"]

но это возвращает:

ls: /var/local/tmp/foo*: No such file or directory

Обратите внимание, что% x [ls '/ var / local / tmp / foo *'] также возвращает ошибку выше.

Если я выполняю ту же команду, но следующим образом:

%x[ls /var/local/tmp/foo*]

работает правильно.

Я предполагаю, что при вводе пути к каталогу в строку ls рассматривает его как файл с буквальным названием "/ var / local / tmp / foo *".

Есть идеи, как обойти это? Я хотел бы использовать переменную, которая содержит эту строку, так что просто поместить / var / local / tmp / foo * напрямую не вариант.

1 Ответ

8 голосов
/ 02 августа 2011

Что-то вроде "/path/to/*" называется glob , и они фактически расширяются оболочкой , а не такими командами, как ls.В то время как вы можете запустить оболочку, чтобы она расширила свой глобус, проще использовать встроенный класс Dir.

Dir["/path/to/*.txt"]

Это возвращает массивсовпадающие имена файлов.

...