簡體   English   中英

Powershell:針對匹配給定模式的所有文件恢復SVN

[英]Powershell: SVN revert for all files matching a given pattern

我不小心將數十個備份文件添加到SVN,並想遞歸還原所有與給定模式(*。〜sql)匹配的文件

在UNIX上,我只需使用

svn revert `svn status .|grep "~sql$"|awk '{print $2}'`

這是“ 如何將所有未版本控制的文件添加到SVN中”的答案之一的變體

使用Powershell,我想到了

svn status|findstr "~sql" | %{ $_.Split('`t')[1]; }

但這似乎削減了文件名的前幾個字符(例如,我得到ch_sys。〜sql而不是scratch_sys。〜sql)。

我在這里想念什么? 還是有更強大的方法來做到這一點?

您將需要使用

$_.Split("`t")

作為代碼的快速解決方案,因為當前您有一個包含`t的字符串而不是包含一個制表符的字符串,因為單引號的字符串不允許轉義序列( ""除外)。 string.Splitchar[]作為參數,並在您傳遞的任何字符處進行分割,因此在這種情況下,它以重音符t分割。

但是您是對的,這實際上不是PowerShell-y的方式。 首先,您使用的是具有大量等效PowerShell的findstr ,例如

svn status | where { $_ -match '~sql' }
(svn status) -match '~sql'

但是,從PowerShell使用SVN時,您還有另一個選擇。 通常,大多數SVN命令都可以輸出XML,它比文本輸出要強大得多。

([xml](svn status --xml)).status.target.entry |
  select -exp path |
  where {$_ -match '~sql'} |
  foreach { svn revert $_ }

是否更漂亮還是有爭議的,但是我更喜歡在可能的情況下使用結構化數據。

然而,

svn revert -R *~sql*

我猜也應該起作用。

如果使用Select-String(別名sls),則還可以使用正則表達式進行匹配。

([xml](svn status --xml)).status.target.entry.path | sls ".+sql" | %{svn revert $_}

(nb $ _是一個matchinfo,它轉換為字符串)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM