在SVN中要批量添加文件但排除某个特定文件夹,可以通过以下几种方法实现:
方法一:使用svn add配合find命令(Linux/macOS)
find . -path './exclude_dir' -prune -o -type f ! -exec svn info {} >/dev/null 2>&1 \; -exec svn add {} \;
解释:
-path './exclude_dir' -prune - 排除名为'exclude_dir'的目录
-type f - 只处理文件
! -exec svn info {} - 检查文件是否已在SVN控制下
-exec svn add {} - 添加符合条件的文件
方法二:分步处理(适用于所有平台)
1、首先添加所有文件:
svn add --force .
2、然后撤销对排除文件夹的添加:
svn revert --recursive exclude_dir/
方法三:使用xargs(Linux/macOS)
svn status | grep '^?' | grep -v 'exclude_dir' | awk '{print $2}' | xargs svn add
解释:
svn status - 显示状态
grep '^?' - 筛选未版本控制的文件
grep -v 'exclude_dir' - 排除特定目录
awk '{print $2}' - 提取文件名
xargs svn add - 批量添加
方法四:Windows下的PowerShell命令
svn status | Where-Object { $_ -match '^\?\s+(.*)' -and (-not ($matches[1] -like '*\exclude_dir\*')) } | ForEach-Object { svn add $matches[1] }
注意事项
1、在执行前建议先使用svn status查看哪些文件会被添加
2、排除的文件夹路径是相对于当前目录的
3、这些方法都不会添加被SVN忽略的文件(由svn:ignore属性控制)
4、添加后仍需执行svn commit提交更改
完整示例(Linux/macOS)
# 进入工作目录
cd /path/to/working/copy
# 批量添加除"temp"文件夹外的所有新文件
find . -path './temp' -prune -o -type f ! -exec svn info {} >/dev/null 2>&1 \; -exec svn add {} \;
# 查看添加结果
svn status
# 提交更改
svn commit -m "批量添加文件,排除temp目录"