すべてのサブフォルダを再帰モードでトラバースし、すべてのSVNリポジトリURLとそのパスをリストするスクリプトを探しています。再帰モードでフォルダからすべてのSVNリポジトリURLを一覧表示
ユーザーの/ homeフォルダに使用されます。
すべてのサブフォルダを再帰モードでトラバースし、すべてのSVNリポジトリURLとそのパスをリストするスクリプトを探しています。再帰モードでフォルダからすべてのSVNリポジトリURLを一覧表示
ユーザーの/ homeフォルダに使用されます。
ディレクトリを再帰的に検索し、それぞれについて、SVN情報を取得しようとします。成功した場合は、ディレクトリに降りてディレクトリ名を表示しないでください。
find -type d -exec bash -c "svn info {} > /dev/null 2> /dev/null" \; -prune -print
これはディレクトリを一覧表示します。
リポジトリ情報が必要な場合は、find execコマンドの途中でリポジトリ情報を追加できます。
find -type d -exec bash -c "svn info {} 2> /dev/null | grep URL" \; -prune -print
編集:
私だけ.svn
サブディレクトリの存在をテストすることによって、より良い結果を見つけました。次に、svn info
が最後に1回呼び出され、パスとURLのためにグレープされます。 (さらに、-0を使用してファイル名のスペースを避けます)
find -type d -exec test -d "{}/.svn" \; -prune -print0 | xargs -0 svn info | grep -e '\(Path\|URL\)'
さまざまな制限があります。最も簡単な方法は、svn ls -R | grep -v "\."
を実行して、現在のリポジトリの場所からすべてのサブフォルダを取得し、それを各行の先頭にlsのルートに追加するfor
ループに送り込むことです。ただし、 "。"が含まれていないファイルがある場合は、これは適切ではありません。フォルダとして検出されます。残念ながらsvn ls
では、ファイル/フォルダでフィルタリングすることはできません。拡張子を付けずにファイル名を処理する必要がある場合は、ソースをチェックアウトし、findを使用してフォルダ名を取得するなど、別の処理を行う必要があります。
現在のフォルダはSVNリポジトリではありませんが、その子孫の1つに含まれている可能性があります – Pentium10
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
名前にスペースを含むディレクトリの下にSVNを保存しないようにしてください。
URLをどのように読んでいますか?私は 'svn info | grep URL'をあなたのスクリプトに挿入しますか? – Pentium10
これは、ディレクトリを印刷します。 URLが必要な場合は、それぞれに 'svn info'を呼び出します。 –
私は、フォルダとURLを一緒にしたい。しかし、URLが最も重要です。 – Pentium10