Используйте каждый файл в каталоге, в bash, используя 'svn mv'
-
11-07-2019 - |
Вопрос
Мне нужно изменить прописные буквы набора файлов в рабочей копии Subversion, например, так:
svn mv test.txt Test.txt svn mv test2.txt Test2.txt svn mv testn.txt Testn.txt ... svn commit -m "caps"
Как я могу автоматизировать этот процесс? Доступны стандартные инструменты установки Linux.
Решение
ls | awk '{system ("svn mv" $ 0 "" toupper (substr ($ 0,1,1)) substr ($ 0,2))}'
очевидно, другие скриптовые языки будут работать так же хорошо. Преимущество awk в том, что оно вездесуще.
Другие советы
Если у вас приличная установка, у вас должен быть установлен python, попробуйте:
#!/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
Я не думаю, что есть простой способ сделать это с помощью bash / sed / tr / find. Р>
Я бы сделал скрипт на Ruby / Perl, который выполняет переименование. Р>
#!/usr/bin/ruby
# Upcase.rb
ARGV.each{ |i|
newname = i.gsub(/(^.|\s.)/{ |x| x.upcase }
`svn mv "#{i}" "#{newname}" `
}
Тогда просто сделай
./Upcase.rb foo.txt test.txt test2.txt foo/bar/test.txt
или если вы хотите сделать целый DIR
find ./ -exec ./Upcase.rb {} +
Обратите внимание, что это изменение нарушает существующие рабочие копии в системах Windows и Mac, поскольку они не могут обрабатывать только переименования регистра.
Обычно я делаю это, перенаправляя вывод 'ls' в файл, используя макросы vim для преобразования каждого имени файла в нужную мне командную строку, а затем запускаю файл как сценарий оболочки. Это грубо, но эффективно.