在名称中使用*执行ls命令

时间:2011-08-02 19:24:54

标签: ruby ls

我想对名为/ var / local / tmp / foo *的文件执行ls命令。我一直在尝试使用

%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 个答案:

答案 0 :(得分:8)

"/path/to/*"之类的东西被称为 glob ,它们实际上是由 shell 扩展的,而不是像ls这样的命令。虽然你可以运行shell来让它为你扩展glob,但是使用内置的Dir类更容易。

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

返回一组匹配的文件名。