Используйте каждый файл в каталоге, в bash, используя 'svn mv' - PullRequest
6 голосов
/ 14 октября 2008

Мне нужно изменить прописные буквы набора файлов в рабочей копии Subversion, например:

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

Как я могу автоматизировать этот процесс? Доступны стандартные инструменты установки linux.

Ответы [ 5 ]

13 голосов
/ 14 октября 2008

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

очевидно, другие скриптовые языки будут работать так же хорошо. Преимущество awk в том, что оно вездесуще.

2 голосов
/ 14 октября 2008

Если у вас приличная установка, у вас должен быть 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
1 голос
/ 19 октября 2008

Обратите внимание, что это изменение нарушает существующие рабочие копии в системах Windows и Mac, поскольку они не могут обрабатывать только переименования регистра.

1 голос
/ 14 октября 2008

Я не думаю, что есть простой способ сделать это с помощью 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 

или если вы хотите сделать целый режиссёр

 find ./ -exec ./Upcase.rb {} + 
0 голосов
/ 14 октября 2008

Обычно я делаю это, перенаправляя вывод 'ls' в файл, используя макросы vim для преобразования каждого имени файла в нужную мне командную строку, а затем запускаю файл как сценарий оболочки. Это грубо, но эффективно.

...