2017-01-09 52 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"]