2017-01-09 55 views
0

我用下面的压缩文件的文件夹:Ruby和外壳:得到同样的输出与LS

13162.zip 14864.zip 19573.zip 20198.zip

在控制台中,当我运行:

cd my_folder; echo `ls *{.zip,.ZIP}` 

我得到下面的输出(这是完美的):

ls: cannot access *.ZIP: No such file or directory 
13162.zip 14864.zip 19573.zip 20198.zip 

现在,当在Ruby中我尝试相同的:

cmd= "cd my_folder; echo `ls {*.zip,*.ZIP}`"; 
puts `#{cmd}` 

它只显示:

ls: cannot access {*.zip,*.ZIP}: No such file or directory 
=> nil 

我尝试此解决方案: Getting output of system() calls in Ruby

,但它似乎没有我的情况下工作。

我怎样才能得到相同的输出在红宝石和壳?

+1

在'irb'控制台中键入'cmd = \'cd Downloads; ls * .zip * .ZIP \''后面跟'puts cmd' –

+0

你想要存档什么?你的代码不是有效的ruby代码。请提供正确的代码。 –

+0

您是否考虑过使用Ruby方法,如['Dir.chdir'](http://ruby-doc.org/core-2.4.0/Dir.html#method-c-chdir)和['Dir.glob'] (http://ruby-doc.org/core-2.4.0/Dir.html#method-c-glob)? – Stefan

回答

0

我想这应该直接在终端上运行:

echo 'system("ls *ZIP,*zip")' | ruby 

或创建Ruby文件,其内容如下

system("cd my_folder; ls {*.zip,*.ZIP}") 

,然后执行它。一旦你写ls,你不需要回声

2

红宝石只有

您可以使用Dir.globFile::FNM_CASEFOLD为不区分大小写的搜索:

Dir.chdir 'my_folder' do 
    Dir.glob('*.zip', File::FNM_CASEFOLD).each do |zip_file| 
    puts zip_file 
    end 
end 

#=> 
# 19573.zip 
# 13162.zip 
# 14864.zip 
# 20198.zip 
# 12345.zIp 

红宝石+庆典

可以使用find为不区分大小写的搜索:

paths = `find my_folder -maxdepth 1 -iname '*.zip'`.split 
#=> ["my_folder/19573.zip", "my_folder/13162.zip", "my_folder/14864.zip", "my_folder/20198.zip", "my_folder/12345.zIp"] 

-printf '%P'也可用于仅显示文件名:

files = `find my_folder -maxdepth 1 -iname '*.zip' -printf '%P\n'`.split 
#=> ["19573.zip", "13162.zip", "14864.zip", "20198.zip", "12345.zIp"]