рекурсивный каталог svn move shell script - PullRequest
3 голосов
/ 15 июня 2010

Я хочу переименовать все вложенные каталоги с именем "foo" в "bar" - я без радости попробовал следующее:

find */ -name 'foo' | xargs svn move {} 'bar' \;

Спасибо

Ответы [ 2 ]

1 голос
/ 16 июня 2010

Вы можете использовать bash для ручного посещения дерева каталогов с помощью обхода после заказа:

#!/bin/bash

visit() {
local file
for file in $1/*; do 
    if [ -d "$file" ]; then
        visit "$file";
        if [[ $file =~ /foo$ ]]; then
            svn move $file ${file%foo}bar;
        fi                  
    fi
done
}

if [ $# -ne 1 ]; then
exit
fi

visit $1

Этот код не обнаруживает бесконечные циклы, но должен работать в простых случаях.

1 голос
/ 15 июня 2010

Это попытается переместить каждый foo в pwd / bar и передаст svn move слишком много аргументов.Вот что я бы сделал:

find . -depth -type d -name 'foo' -print | while read ; do echo svn mv $REPLY `dirname $REPLY`/bar ; done 

Вы можете удалить echo, чтобы он действительно выполнял эту операцию.Вышеуказанное работает в предположении, что в именах файлов нет пробелов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...