Capitalice cada archivo en un directorio, en bash, usando 'svn mv'
-
11-07-2019 - |
Pregunta
Necesito cambiar la capitalización de un conjunto de archivos en una copia de trabajo de subversión, de esta manera:
svn mv test.txt Test.txt svn mv test2.txt Test2.txt svn mv testn.txt Testn.txt ... svn commit -m "caps"
¿Cómo puedo automatizar este proceso? Herramientas de instalación de Linux estándar disponibles.
Solución
ls | awk '{system (" svn mv " $ 0 " " toupper (substr ($ 0,1,1)) substr ($ 0,2))}'
obviamente, otros lenguajes de script funcionarán igual de bien. awk tiene la ventaja de que es ubicuo.
Otros consejos
Si tiene una instalación decente, debería tener Python, intente esto:
#!/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
No creo que haya una manera fácil de hacerlo con bash / sed / tr / find.
Haría un script Ruby / Perl que cambia el nombre.
#!/usr/bin/ruby
# Upcase.rb
ARGV.each{ |i|
newname = i.gsub(/(^.|\s.)/{ |x| x.upcase }
`svn mv "#{i}" "#{newname}" `
}
Entonces solo hazlo
./Upcase.rb foo.txt test.txt test2.txt foo/bar/test.txt
o si quieres hacer un directorio completo
find ./ -exec ./Upcase.rb {} +
Tenga en cuenta que este cambio rompe las copias de trabajo existentes en los sistemas Windows y Mac, ya que no pueden manejar los cambios de nombre de mayúsculas y minúsculas.
Normalmente hago esto redirigiendo la salida 'ls' a un archivo, usando macros vim para masajear cada nombre de archivo en la línea de comando que quiero, luego ejecuto el archivo como un script de shell. Es crudo pero efectivo.