2011-11-08 31 views

Trả lời

4

Đệ quy tìm thư mục và mỗi lần thử tìm kiếm thông tin SVN. Nếu thành công, sau đó không đi sâu vào thư mục và in tên thư mục.

find -type d -exec bash -c "svn info {} > /dev/null 2> /dev/null" \; -prune -print 

Điều này sẽ liệt kê các thư mục.

Nếu bạn muốn thông tin kho lưu trữ, bạn có thể thêm nó vào giữa lệnh lệnh find exec.

find -type d -exec bash -c "svn info {} 2> /dev/null | grep URL" \; -prune -print 

Edit:

tôi thấy kết quả tốt hơn nhiều bởi chỉ thử nghiệm cho sự hiện diện của một thư mục con .svn. Sau đó, svn info được gọi một lần ở cuối và được grepped cho Đường dẫn và URL. (Cộng với việc sử dụng -0 để ngăn không gian trong tên tệp.)

find -type d -exec test -d "{}/.svn" \; -prune -print0 | xargs -0 svn info | grep -e '\(Path\|URL\)' 
+0

Làm cách nào để bạn đọc URL? Tôi không thể định vị 'svn info | grep URL' trong tập lệnh của bạn? – Pentium10

+0

Thao tác này sẽ in các thư mục. Nếu bạn muốn URL, sau đó gọi 'svn info' trên mỗi người trong số họ. –

+0

Tôi muốn thư mục và URL cùng nhau. Nhưng url là quan trọng nhất. – Pentium10

0

Tùy thuộc vào loại giới hạn nào bạn có ở đó có thể là các cách khác nhau. Cách dễ nhất là làm svn ls -R | grep -v "\." để lấy tất cả các thư mục con từ vị trí kho lưu trữ bạn đang ở và cấp dữ liệu đó vào vòng lặp for thêm URI vào thư mục gốc của ls ở phía trước của mỗi dòng. Tuy nhiên, điều này sẽ không đủ nếu bạn có các tệp không chứa "." vì chúng sẽ được phát hiện dưới dạng thư mục. Thật không may svn ls không cho phép bạn lọc theo tệp/thư mục, vì vậy nếu bạn cần xử lý tên tệp mà không có tiện ích mở rộng thì bạn phải làm điều gì đó khác như kiểm tra nguồn và sử dụng tìm để lấy tên thư mục.

+0

Thư mục hiện tại tôi đang ở, không phải là một kho lưu trữ SVN, nhưng nó có thể có ở một trong các hậu duệ của chúng – Pentium10

0
user_home=... # fill in the user's home dir 
old_dir=/../ 
find $user_home -name .svn | rev | cut -f2- -d/ | rev | while read line ; do 
    echo -n "$line"$'\t' 
    wc -c <<<"$line" 
done | sort -t$'\t' -k1,1 -k2,2n | while read dir size ; do 
    if [[ $dir != $old_dir* ]] ; then 
     old_dir=$dir 
     svn info $dir | grep URL 
     echo PATH: $dir 
     echo 
    fi 
done 

Chỉ hy vọng người dùng không lưu SVN dưới thư mục có dấu cách trong tên.

Các vấn đề liên quan