Renaming all subdirectories using Ruby -
i have nested folder structure on windows 7 machine. windows refuses delete directories names long. want rename subfolders 2 in hope short enough deleted. script:
@count = 0 dir.glob("**/*") |file| #find src files in current folder , subfolders if file.directory?(file) file.rename(file, file.dirname(file) + file::separator + "2") @count += 1 end end puts @count when script runs, instead of renaming sub-directories, changes 1 more sub-directory, gradually going 1 level deeper each time. i.e., output running script @ moment is:
c:\>renamer.rb 30 c:\>renamer.rb 31 c:\>renamer.rb 32 i'm confused why happening , appreciate input.
am taking correct approach? assume ruby's recursive directory deletion methods fail. however, when try , execute
require "fileutils" fileutils.remove_dir ("2", force = true) i error
syntax error, unexpected ',', expecting ')' fileutils.remove_dir ("2", force = true) ^ syntax error, unexpected ')', expecting end-of-input fileutils.remove_dir ("2", force = true) ^
the problem dir.glob("**/*") returns array this:
['folder', 'folder/sub', 'folder/sub/sub'] now when do:
file.rename(file, file.dirname(file) + file::separator + "2") it rename folder, when reaches folder/sub, doesn't exist anymore, because have renamed folder 2: 2/sub instead of folder/sub. solution reverse array. starts renaming process on deepest level , works way top level:
dir.glob("**/*").reverse.each |file| # rest of code can stay same end as second problem, instead of:
fileutils.remove_dir ("2", force = true) you should use:
fileutils.remove_dir("2", true) first of all, make sure there no space between remove_dir , (. that's what's causing error.
also force name of parameter , default it's false. that's why see force = false in api. if want force true can pass true function, show above.
Comments
Post a Comment