如何使用PowerShell递归删除所有SVN文件

34

如何使用PowerShell从目录中删除所有Subversion文件?


7
也许这并不适用,但是可以从您的代码库中创建一个不包含Subversion工件的副本。例如,使用TortoiseSVN,您可以使用“SVN导出”。 - Adam Ralph
也许这可以帮助:https://devblogs.microsoft.com/scripting/how-can-i-use-windows-powershell-to-delete-all-the-tmp-files-on-a-drive/ - Ferroao
4个回答

43

如果你确实只想删除 .svn 目录,可以尝试以下方法:

gci c:\yourdirectory -include .svn -Recurse -Force | 
   Remove-Item -Recurse -Force

编辑: 在gci命令中添加了-Force参数以列出隐藏的目录并缩短代码。

如果您需要避免删除具有 .svn 扩展名的文件,则应使用 ? 过滤项目。Keith是正确的。


我们为什么不能在复制时递归地排除svn文件呢?我尝试了Copy-Item $source -Destination $dest -Recurse -Exclude '.svn',但没有起作用。所以我先完全复制了它,然后使用以下命令递归地删除.svn文件。 - gprasant
它不起作用。我猜这和使用 Get-ChildItem dir -recurse -exclude .. 是一样的情况。-exclude(如果我记得正确,还有 -include)与 -recurse 不兼容。 - stej
以防万一有人遇到类似问题,这个答案帮助我删除了大量的thumbs.db文件并清理了我的diff视图。不过我更喜欢别名"dir * -recurse -include thumbs.db | del -recurse -force"。 - Brian Boatright
当我尝试使用-force选项时,gci似乎不喜欢它 - 但仍然似乎在没有该选项的情况下工作(Powershell 4.0) - Nigel Ellis

10

假设您不想删除任何可能也带有 .svn 扩展名的文件:

Get-ChildItem $path -r -include .svn -Force | Where {$_.PSIsContainer} |
    Remove-Item -r -force

微软已回应下面评论中开放的建议,因为在PowerShell V3中你可以使用-directory来取代额外的(非常慢的)管道符Where {$_.PSIsContainer}

gci $path -r -include .svn -force -directory | Remove-Item -r -force

你可以从 Windows Management Framework 3.0下载PowerShell v3用于Windows 7。


2
顺便说一句,我期待着那一天的到来,当你不需要 Where {$_.PSIsContainer},而只需要执行 gci . -r -containerOnly。我已经将我的 Get-ChildItem 代理成这种方式工作,但我不能保证其他人也有这样的设置。 :-( - Keith Hill
你在connect中是否添加了“-containerOnly”的建议?我肯定会投赞成票。 - stej
2
Stej,是的,在这里投赞成票:https://connect.microsoft.com/PowerShell/feedback/details/308796/add-enumeration-parameter-to-get-childitem-cmdlet-to-specify-container-non-container-both - Keith Hill
我认为这并不需要。我可能只是出于习惯添加了它。 :-) - Keith Hill
@SethSpearman,您可以在remove-item管道中省略-r,但这样做会导致每次递归时出现“确定要递归删除项目吗?[y] [n]”警告...因此最好明确添加-r。 - Bradley Mountford
显示剩余5条评论

5

无法这样做,这段代码来自其他机器,它很混乱。 - epitka

1

如果你想删除所有文件名中包含特定字符串的文件,那么stej的回答是正确的。在这种情况下,你应该使用:

gci "your_path" -include \*"specific_string"\* -Recurse -Force | Remove-Item -Recurse -Force

注意:
只有当your_path包含空格或特殊字符时,才需要加引号。
specific_string需要加引号以确保识别两个通配符,特别是如果字符串包含如()这样的字符。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接