我们正在寻找一个脚本,它将以递归模式遍历所有子文件夹,并列出所有SVN存储库URL及其找到的路径。
它将用于用户的/ home文件夹。
答案 0 :(得分:4)
递归查找目录,并为每个目录尝试获取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
一次,并为Path和URL进行grepped。 (另外使用-0来防止文件名中的空格。)
find -type d -exec test -d "{}/.svn" \; -prune -print0 | xargs -0 svn info | grep -e '\(Path\|URL\)'
答案 1 :(得分:0)
根据您的限制,可能会有不同的方式。最简单的方法是执行svn ls -R | grep -v "\."
从您所在的存储库位置获取所有子文件夹,并将其输入到for
循环中,该循环将URI添加到ls的根目录中每条线的前面。但是,如果您的文件不包含“。”,则这将是不够的。因为它们将被检测为文件夹。遗憾的是svn ls
不允许您按文件/文件夹进行过滤,因此如果您需要处理没有扩展名的文件名,那么您必须执行一些不同的操作,例如签出源代码并使用find获取文件夹名。
答案 2 :(得分: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
希望用户不要将SVN存储在名称中带空格的目录下。