Capitalizar cada arquivo em um diretório, em bash, usando 'svn mv'
-
11-07-2019 - |
Pergunta
Eu preciso mudar a capitalização de um conjunto de arquivos em uma cópia de trabalho do Subversion, assim:
svn mv test.txt Test.txt svn mv test2.txt Test2.txt svn mv testn.txt Testn.txt ... svn commit -m "caps"
Como posso automatizar esse processo? Linux Standard instalar ferramentas disponíveis.
Solução
ls | awk '{system ( "svn mv" $ 0 "" substr toupper (substr ($ 0,1,1)) ($ 0,2))}'
Obviamente, outras linguagens de script irá funcionar tão bem. awk tem a vantagem de que ele onipresente.
Outras dicas
Se você tem um decente instalar você deve ter python, tentar dar um presente:
#!/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
Eu não acho que há uma maneira fácil de fazê-lo com bash / sed / tr / encontrar.
Eu faria um script Ruby / Perl que faz a mudança de nome.
#!/usr/bin/ruby
# Upcase.rb
ARGV.each{ |i|
newname = i.gsub(/(^.|\s.)/{ |x| x.upcase }
`svn mv "#{i}" "#{newname}" `
}
Em seguida, basta fazer
./Upcase.rb foo.txt test.txt test2.txt foo/bar/test.txt
ou se você quiser fazer um dir toda
find ./ -exec ./Upcase.rb {} +
Por favor, note que esta alteração quebra workingcopies em sistemas Windows e Mac já existentes, como eles não podem lidar com caso somente renomeia.
Eu normalmente faço isso redirecionando a saída dos 'ls' para um arquivo, usando vim macros para massagear cada nome de arquivo na linha de comando eu quero, em seguida, executar o arquivo como um script shell. É bruto, mas eficaz.