for src in *; do
dst=$(echo "$src" | tr '[A-Z]' '[a-z]')
[ "$src" = "$dst ] || svn rename "$src" "$dst"
done
Как это работает:
- Цикл по имени файла источника.
- Имя файла назначения - это имя файла источника в нижнем регистре.tr выполняет символьные переводы.
- Если имена файлов источника и назначения совпадают, мы в порядке, иначе svn переименовывается.Вместо этого вы можете использовать оператор if, но для однострочных условных выражений довольно часто используется
||
.
Если вам нужна рекурсия, вы можете создать небольшой скрипт svn-lowername.sh
(небольшой вариантвыше):
#!/bin/bash
for src; do
dst=$(echo "$src" | tr '[A-Z]' '[a-z]')
[ "$src" = "$dst" ] || svn rename "$src" "$dst"
done
Обязательно chmod +x svn-lowername.sh
.Затем выполните:
find -name .svn -prune -o -type f -print0 | xargs -0 ./svn-lowername.sh
Если вы думаете, что эта проблема может повториться, спрятайте svn-lowername.sh
на своем пути (~/bin/
может быть хорошим местом), и вы можете потерять префикс ./
, когдазапустить его.
Вы также можете использовать svn-lowername.sh
только на одном режиссере, как это:
./svn-lowername.sh *