如何使用find
unix實用程序查找機器上的所有工作副本?例如,我可以使用find/-name .svn -type d
命令,但它會輸出所有冗餘結果(很多子文件夾),而我只需要顯示工作副本的父目錄。查找機器上的所有subversion工作副本
有相關的問題,但它並沒有真正在我的情況有所幫助:How can I find the root folder of a given subversion working copy
如何使用find
unix實用程序查找機器上的所有工作副本?例如,我可以使用find/-name .svn -type d
命令,但它會輸出所有冗餘結果(很多子文件夾),而我只需要顯示工作副本的父目錄。查找機器上的所有subversion工作副本
有相關的問題,但它並沒有真正在我的情況有所幫助:How can I find the root folder of a given subversion working copy
也許這樣的事情?
#!/bin/bash
if [ -d "$1/.svn" ]; then
echo $1
else
for d in $1/*
do
if [ -d "$d" ]; then
($0 $d)
fi;
done
fi;
命名,例如 - find_svn.sh,使其可執行,並呼籲像./find_svn.sh /var/www
(可能需要一些調整,以標準化的目錄名(S),帶斜線..但以這種形式對我的作品,當在沒有斜線的情況下調用某個dir時)。
更新3 - 排序發現,以確保.svn文件來隱藏之前的文件輸出。仍然可能因檢入隱藏目錄而失敗。
Perl可以刪除嵌套的路徑,爲您提供:
find -s . -ipath *.svn | perl -lne's!/\.svn$!!i;$a&&/^$a/||print$a=$_'
在人類,這個說:每個SVN路徑,忽略/.svn
部分,如果當前的路徑是最後路徑的孩子我印,不要打印。
例如:在目錄結構:
$ find .
.
./1
./1/.svn
./1/1
./1/1/.svn
./2
./2/.svn
./3
這會產生
./1
./2
如果你已經找到GNU /排序
find /path -type f -name ".svn*" -printf "%h\n" | sort -u
以下爲我工作就好了。它還發現所有稀疏結賬(或嵌套工作副本)。
find $PWD -type d -wholename "*/.svn" |
while read path
do
path=${path%%/.svn}
wcr=$(svn info ${path} 2>/dev/null | perl -F"/:\s/" -le '{ print $F[1] if $F[0] =~ /^Working Copy Root/; }')
[ "$path" = "$wcr" ] && {
echo -e "\n WC Root $path"; svn stat -qu $path;
}
done
屬於上http://superuser.com – bzlm 2010-01-25 17:12:42
我要說的是,這__IS__編程有關,至少在一定程度上也@bzlm,我懇請閱讀:HTTP://meta.stackexchange .com/questions/4128/change-the-belong-on-serverfault-tag-when-a-question-is-moving-to-serverfault/4211#4211 iee請不要使用belongs-on-xxx標籤來代替 – Kimvais 2010-01-25 17:20:04
@bzim評論對錶達意見是可以的 - 標籤不是。請不要使用「belongs-on-superuser」之類的標籤,特別是不要使用這種標籤替換所有原始標籤 - 請參閱http://meta.stackexchange.com/questions/36819/too-many-questions-are-被關閉作爲不編程相關/ 36821#36821 – 2010-01-25 17:42:36