OneDay

40歳からプログラマとして生活しています。

Ruby/Rails 簡単なファイル操作

Rubyでディレクトリやファイルを操作する。railsでバックアップのタスクを作成する際に必要となった。

File.new("./a.rb", "w")          #a.rb というファイルをカレントディレクトリに作る FileUtils.touch('./a.rb')でも可
File.delete("./a.rb")                 #ファイル削除

Dir.pwd                           #カレントディレクトリ
Dir.new('.').entries              #カレントディレクトリの中身を出力
Dir.new(Dir.pwd).entries          #カレントディレクトリの中身を出力、Dir.pwd.entriesはNG
Dir.new('.').entries.sort[2..-1]  #2番目から最後のファイルを開く (後述)
Dir.glob('*')                            #カレントディレクトリの中身を出力。これは'.'と'..'を除外する。

FileUtils.rm_rf('./test_dir')     #test_dir以下を再帰的に削除         
FileUtils.mkdir(File.join(Dir.pwd,'test')) 
#カレントディレクトリ配下にtestというディレクトリ作る
# mkdir_p を使用すれば、testディレクトリがあっても
# 既に存在しますというエラーにならず、内部のファイルも削除されない。


Dir.new('.').entries.sort[2..-1]
どのディレクトリにでも[".", ".."]がデフォルトで入っているが、このコードはそれらを除外してくれる。
Dir.new('.').entries.sort[0] =>"."
Dir.new('.').entries.sort[1] =>".."
配列の[-1]は要素の一番最後を指す。[2..-1]だと2番目の要素から最後の要素まで全部となる。



参考

[1] pry(main)> ary = ["a", "b", "c", "d", "e"]
=> ["a", "b", "c", "d", "e"]
[2] pry(main)> ary[0..4]
=> ["a", "b", "c", "d", "e"]
[3] pry(main)> ary[2..-1]
=> ["c", "d", "e"]
[4] pry(main)> ary[4..-1]
=> ["e"]                         #5番目以降最後のファイル
[5] pry(main)> ary[5..-1]
=> []                              #6番目以降最後のファイル、だから無い

MacUnixを使用しているとシェルスクリプトでささっと済ませてしまうディレクトリやファイル操作だが、Rubyでも案外簡単。pryやirbで試しながら、backupのタスクファイルを作成した。