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

Rob*_*bin 3 ruby ls

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

%x[ls "#{path]"]
Run Code Online (Sandbox Code Playgroud)

但是这会返回:

ls: /var/local/tmp/foo*: No such file or directory
Run Code Online (Sandbox Code Playgroud)

请注意,%x [ls'/ var/local/tmp/foo*']也会返回错误.

如果我执行相同的命令,但如下所示:

%x[ls /var/local/tmp/foo*]
Run Code Online (Sandbox Code Playgroud)

它工作正常.

我猜测将目录路径放入字符串会导致ls将其视为名为"/ var/local/tmp/foo*"的文件.

任何想法如何解决这个问题?我想使用一个包含此字符串的变量,因此直接放入/ var/local/tmp/foo*不是一个选项.

ham*_*mar 8

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

Dir["/path/to/*.txt"]
Run Code Online (Sandbox Code Playgroud)

这将返回匹配文件名的数组.