2010-06-15 110 views

回答

1

这将尝试将每个foo移动到pwd/bar并通过svn move太多参数。这是我会做:

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

您可以卸下echo有它实际上执行的操作。上述工作假设您的文件名中没有空格。

+1

您可能希望在'while read'之前对'find'结果进行排序--reverse。为了避免在重命名它的父对象之后重命名一个嵌套的目录**,并且在查找中还有一个'-type d'以实现良好的度量。 – 2010-06-15 14:52:37

+0

@陈 - 很好的建议。为了解决这个问题,增加了'-depth'来处理嵌套的case和'-type d'“。 – 2010-06-15 18:24:24

1

你可以使用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 

此代码没有任何无限循环检测,而应在简单的情况下工作。