I use this rough but simple script to organize the files from a folder into a tree of folders according to the file name. Whene I create a file I add some "tags" to its name. The script moves a file with this name:
[tag1-tag2-tag3] file.extto this directory:
tag1/tag2/tag3/file.extbuildind the tree as it goes.
"Moves the 'tagged' files to the appropriate dir" def sieve_files(source_dir, dest_dir) # default source dir is current dir if (source_dir == nil) source_dir = "." end # default destination dir is "./file_sieve" if (dest_dir == nil) dest_dir = "/file_sieve" end pattern = Regexp.new("\\[.*\\].*") # picks file with a "[tag]" Dir.foreach(source_dir) do |filename| if pattern.match(filename) tag = filename[1, filename.index(']')-1] # gets the "[tag]" clean_filename = filename[filename.index(']')+2, filename.length].strip() # gets the file name dir_structure = tag.split('-') # use tag to determine folder structure old_name = source_dir + "/" + filename # builds the directory tree new_name = implode(dest_dir, dir_structure) + clean_filename # builds the full path to the file create_dir(dest_dir, dir_structure) # creates the directory tree File.rename(old_name, new_name) # moves the file end end end "Create path string concatenating the path components" "(and stripping them of white spaces)" def implode(base_dir, dirlist) res = base_dir + "/" dirlist.each { |item| res += item.strip() + "/"} res end "Create a directory tree" def create_dir(base_dir, dirlist) dir_to_create = base_dir + "/" Dir.mkdir(dir_to_create) unless (File.exist?(dir_to_create)) dirlist.each do |item| dir_to_create += item.strip() + "/" Dir.mkdir(dir_to_create) unless (File.exist?(dir_to_create)) end end source_dir = ARGV.shift dest_dir = ARGV.shift sieve_files(source_dir, dest_dir)
Nessun commento:
Posta un commento