Capitaliser chaque fichier d'un répertoire, en bash, avec 'svn mv'
-
11-07-2019 - |
Question
Je dois modifier la capitalisation d'un ensemble de fichiers dans une copie de travail Subversion, comme suit:
svn mv test.txt Test.txt svn mv test2.txt Test2.txt svn mv testn.txt Testn.txt ... svn commit -m "caps"
Comment puis-je automatiser ce processus? Outils d'installation standard disponibles sur Linux.
La solution
ls | awk '{system ("svn mv" $ 0 "" toupper (substr (0,1,1))) substr ($ 0,2))}'
évidemment, les autres langages de script fonctionneront aussi bien. awk a l'avantage qu'il est omniprésent.
Autres conseils
Si vous avez une installation correcte, vous devriez avoir python, essayez ceci:
#!/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
Je ne pense pas qu’il soit facile de le faire avec bash / sed / tr / find.
Je créerais un script Ruby / Perl qui renommerait.
#!/usr/bin/ruby
# Upcase.rb
ARGV.each{ |i|
newname = i.gsub(/(^.|\s.)/{ |x| x.upcase }
`svn mv "#{i}" "#{newname}" `
}
Ensuite, faites simplement
./Upcase.rb foo.txt test.txt test2.txt foo/bar/test.txt
ou si vous voulez faire un répertoire entier
find ./ -exec ./Upcase.rb {} +
Notez que cette modification casse les versions de travail existantes sur les systèmes Windows et Mac, car ils ne peuvent pas gérer uniquement les cas renommés.
En général, je le fais en redirigeant la sortie 'ls' vers un fichier, en utilisant les macros vim pour masquer chaque nom de fichier dans la ligne de commande souhaitée, puis en exécutant le fichier en tant que script shell. C'est brutal mais efficace.