ソリューション
あなたが使用することができます。
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::Name
がdocumentationに私をブラフグーグル。
directory?
およびfile?
は有望な名前です!
この:
p sftp.dir.entries(path).first.file?
はfalse
を返しました。
最後に、私は同じブロックでreject
とselect
を用いたものをpartition
で短縮することができることを思い出し:
戻り二つの配列、最初のブロックが真と評価さ ために列挙の要素を含みます、 2番目は残りの部分を含む。