Domanda

Devo cambiare la maiuscola di un set di file in una copia di lavoro di sovversione, in questo modo:

svn mv test.txt Test.txt
svn mv test2.txt Test2.txt
svn mv testn.txt Testn.txt
...
svn commit -m "caps"

Come posso automatizzare questo processo? Strumenti di installazione standard di Linux disponibili.

È stato utile?

Soluzione

ls | awk '{system (" svn mv " $ 0 " " toupper (substr ($ 0,1,1)) substr ($ 0,2))}'

ovviamente, anche altri linguaggi di script funzioneranno allo stesso modo. awk ha il vantaggio di essere onnipresente.

Altri suggerimenti

Se hai un'installazione decente dovresti avere Python, provalo:

#!/usr/bin/python
from os import rename, listdir
path = "/path/to/folder"
try:
    dirList = listdir(path)
except:
    print 'There was an error while trying to access the directory: '+path
for name in dirList:
    try:
        rename(path+'\\'+name, path+'\\'+name.upper())
    except:
        print 'Process failed for file: '+name

Non credo ci sia un modo semplice per farlo con bash / sed / tr / find.

Farei uno script Ruby / Perl che fa la ridenominazione.

 #!/usr/bin/ruby 
 #  Upcase.rb 
 ARGV.each{ |i|
  newname = i.gsub(/(^.|\s.)/{ |x| x.upcase }
  `svn mv "#{i}" "#{newname}" `
 }

Quindi fai

 ./Upcase.rb foo.txt test.txt test2.txt foo/bar/test.txt 

o se vuoi fare un'intera directory

 find ./ -exec ./Upcase.rb {} + 

Si noti che questa modifica interrompe le copie di lavoro esistenti sui sistemi Windows e Mac, in quanto non sono in grado di gestire solo rinominazioni di maiuscole.

Di solito lo faccio reindirizzando l'output di 'ls' su un file, usando macro vim per massaggiare ogni nome di file nella riga di comando che voglio, quindi eseguo il file come uno script di shell. È rozzo ma efficace.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top