;+ ;NAME: ; dir_str_replace ;PURPOSE: ; take all of the files in a given directory and replace strings ; works recursively. Also renames files ;CALLING SEQUENCE: ; dir_str_replace, directory, string, replacement, filter=filter ;INPUT: ; directory = a directory name, scalar ; string = a string to replace, can be vector ; replacement = the replacement string, can be a vector the same size ; as the input string ; no_svn = if set, do the string replacement to the output filename, ; but don't mess with svn. ; move_it = if set, use svn mv, and not svn cp ;HISTORY: ; 5-Jan-2010, jmm, jimm@ssl.berkeley.edu ;- Pro dir_str_replace, dir_in, string_in, string_out, $ no_svn = no_svn, $ move_it = move_it, $ _extra = _extra ;error checking dir = file_search(dir_in, /test_directory, /mark_directory) If(is_string(dir) Eq 0) Then Begin message, /info, 'Missing Directory: '+dir_in Return Endif files = file_search(dir+'*', /test_read, /test_write) ;If the files exist, then replace for each one: If(is_string(files) Eq 0) Then Begin message, /info, 'No replaceable files found in: '+dir Return Endif nfiles = n_elements(files) For j = 0L, nfiles-1 Do Begin dj = file_search(files[j], /test_directory) If(is_string(dj)) Then Begin ; print, 'Called: dir_str_replace, '+dj+' string_in, string_out' dir_str_replace, dj, string_in, string_out, no_svn = no_svn, $ move_it = move_it, _extra = _extra Endif Else Begin ; print, 'Called: svn_file_str_replace, '+files[j]+' string_in, string_out' file_str_replace, files[j], string_in, string_out, no_svn = no_svn, $ move_it = move_it, _extra = _extra Endelse Endfor ;You may need to change the directory name: x1 = file_dirname(dir) x2 = file_basename(dir) x20 = x2 n = n_elements(string_in) For k = 0, n-1 Do x2 = ssw_str_replace(x2, string_in[k], string_out[k]) If(x2 Eq x20) Then Begin same_name = 1b Endif Else same_name = 0b dir_out = x1+'/'+x2 If(~same_name) Then Begin ;if the name is unchanged, do nothing print, 'Copying: '+dir_out ;It's important to be sure that dir_out does not exist. Otherwise the ;copy commands are different If(file_exist(dir_out)) Then Begin spawn, 'chmod -R u+w '+dir+out spawn, 'rm -rf '+dir_out Endif If(keyword_set(no_svn)) Then Begin If(keyword_set(move_it)) Then Begin spawn, '/bin/mv -r '+dir+' '+dir_out Endif Else spawn, '/bin/cp -r '+dir+' '+dir_out Endif Else Begin If(keyword_set(move_it)) Then Begin spawn, 'svn mv '+dir+' '+dir_out Endif Else spawn, 'svn cp '+dir+' '+dir_out Endelse Endif Return End