2016-12-17 10 views
1

Net::SFTPdirを使用してどのエントリがファイルかディレクトリかを判断しようとしています。ここで何をチェックするかわからない:Net :: SFTPとRubyでエントリがファイルかディレクトリかを確認する方法

Net::SFTP.start(server_ip, ftp_username, :password => ftp_password, :port => ssh_port, :timeout => 6) do |sftp| 
     files = sftp.dir.entries(path).select{|entry| ??? } 
     directories = sftp.dir.entries(path).select{|entry| ??? } 
end 

答えて

1

ソリューション

あなたが使用することができます。

files, directories = sftp.dir.entries(path).partition{ |entry| entry.file? } 

p files.map(&:name) 
# ["Gemfile", "Gemfile.lock", ".gitignore", "README.rdoc", "Rakefile", "sftp_pv.expect", "config.ru"] 
p directories.map(&:name) 
# ["data", "config", "..", "app", "tmp", "public", "vendor", "test", ".git", ".", "log", "bin", "lib", "db"] 

がどのように解決策を見つけるために?

コードをコピーし、必要なすべての変数をパーソナルサーバーに接続するように定義し、リモートのRailsプロジェクトにpathを定義しました。

私はp sftp.dir.entries(path).first

にあなたのブロックを変更しこれが出てきた:

#<Net::SFTP::Protocol::V01::Name:0x00000000dbf3f8 @name="data", @longname="drwxr-xr-x 2 dev  dev   20480 Oct 27 10:45 data", @attributes=#<Net::SFTP::Protocol::V01::Attributes:0x00000000dbf5b0 @attributes={:size=>20480, :uid=>1002, :gid=>1003, :permissions=>16877, :atime=>1482015468, :mtime=>1477557907}>> 

Net::SFTP::Protocol::V01::Namedocumentationに私をブラフグーグル。

directory?およびfile?は有望な名前です!

この:

p sftp.dir.entries(path).first.file?

falseを返しました。

最後に、私は同じブロックでrejectselectを用いたものをpartitionで短縮することができることを思い出し:

戻り二つの配列、最初のブロックが真と評価さ ために列挙の要素を含みます、 2番目は残りの部分を含む。

関連する問題