2010-06-15 116 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 

此代碼沒有任何無限循環檢測,而應在簡單的情況下工作。