You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用带通配符的单条命令将SVN目录内容移至子目录?

单条命令实现SVN目录结构调整方案

当然可以用单条命令完成这个操作!结合SVN命令和shell的通配符/管道能力,完全能复刻你提到的简洁操作风格,下面分两种场景给你具体方案:

方案1:依赖Bash扩展通配符(和你想要的风格最匹配)

这种方式和你举例的mkdir folderB mv !(folderB) folderB逻辑一致,需要Bash开启extglob扩展(大部分现代Bash默认可能未开启,临时开启即可):

  • 先临时开启扩展(当前shell会话有效):shopt -s extglob
  • 切换到目标目录:cd trunk/folderA
  • 执行单条命令:
    svn mkdir folderB && svn move !(folderB) folderB
    
  • 细节说明:
    • svn mkdir folderB先在SVN中创建子目录folderB,同时将创建操作纳入版本控制
    • !(folderB)是Bash的扩展通配符,会匹配当前目录下除了folderB之外的所有文件和子目录
    • 可以先加--dry-run参数做测试,确认操作范围:svn mkdir folderB && svn move --dry-run !(folderB) folderB

方案2:通用无依赖方案(适配所有Shell环境)

如果你的环境不支持Bash扩展,或者想更通用,可以用管道和进程替换实现:

  • 切换到目标目录:cd trunk/folderA
  • 执行单条命令:
    svn mkdir folderB && svn move --targets <(svn ls | grep -v folderB) folderB
    
  • 细节说明:
    • svn ls列出当前目录下所有受SVN管控的内容
    • grep -v folderB过滤掉刚创建的folderB
    • <(...)是进程替换,把前面的输出作为--targets参数的输入,告诉SVN要移动哪些内容

重要注意事项

  • 操作前请先执行svn update确保本地工作副本是最新状态,避免冲突
  • 操作完成后记得提交变更:svn commit -m "Move all contents of folderA into folderA/folderB"
  • 如果folderA包含隐藏文件(以.开头),方案1需要额外开启dotglob扩展:shopt -s dotglob,否则通配符不会匹配隐藏文件

内容的提问来源于stack exchange,提问作者SloppyNick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 10:03:32