Here's the error I receive now (after Guy fixing my first issue): c:/ruby/lib/ruby/1.8/net/ftp.rb:211:in `readline': End of file reached (EOFError) from c:/ruby/lib/ruby/1.8/net/ftp.rb:211:in `getline' from c:/ruby/lib/ruby/1.8/net/ftp.rb:221:in `getmultiline' from c:/ruby/lib/ruby/1.8/net/ftp.rb:235:in `getresp' from c:/ruby/lib/ruby/1.8/net/ftp.rb:251:in `voidresp' from c:/ruby/lib/ruby/1.8/net/ftp.rb:433:in `retrlines' from c:/ruby/lib/ruby/1.8/net/ftp.rb:419:in `synchronize' from c:/ruby/lib/ruby/1.8/net/ftp.rb:419:in `retrlines' from c:/ruby/lib/ruby/1.8/net/ftp.rb:628:in `list' ... 6 levels... from C:/src/ruby/chmod/ftp_chmod.rb:13:in `chmodFiles' from C:/src/ruby/chmod/ftp_chmod.rb:35 from C:/src/ruby/chmod/ftp_chmod.rb:33:in `open' from C:/src/ruby/chmod/ftp_chmod.rb:33 Dunno why I'm getting the EOF. Same basic logic works great in PHP and Python. Any help would be greatly appreciated. Here's the code: require 'net/ftp' def printInfo(msg) puts Time.now.to_s + " :: #{msg}" end def chmodFiles(conn, dir) conn.chdir(dir) pwd = conn.pwd() dirList = conn.list() printInfo("file count = #{dirList.length}") dirList.each() { |entry| fileName = entry.split()[8] if entry =~ /^d/ # It's a directory printInfo(pwd) chmodFiles(conn, fileName) conn.chdir("..") end } end ## Main HOST = ARGV[0] || "localhost" PERMISSIONS = ARGV[1] || "0775" STARTDIR = ARGV[2] || "." printInfo("Permissions = #{PERMISSIONS}") printInfo("Start Dir = #{STARTDIR}") Net::FTP.open(HOST) { |conn| conn.login("blahuser", "blahpass") chmodFiles(conn, STARTDIR) }