我可以使用正則表達式重命名TortoiseSVN中目錄中的所有文件嗎?SVN使用正則表達式重命名目錄中的所有文件
基本上我想在.extension之前去掉文件名的最後兩個字符。
例如,
MyFileXY.c
MyOtherFile12.c
改爲:
MyFile.c
MyOtherFile.c
我可以使用正則表達式重命名TortoiseSVN中目錄中的所有文件嗎?SVN使用正則表達式重命名目錄中的所有文件
基本上我想在.extension之前去掉文件名的最後兩個字符。
例如,
MyFileXY.c
MyOtherFile12.c
改爲:
MyFile.c
MyOtherFile.c
我可以重命名使用正則表達式 在TortoiseSVN的一個目錄中的所有文件?
號SRC和DST在svn move
是字符串常量
如果您外殼可以進行這樣的微調,可以嘗試使用結果SVN命令裏面,但無論如何 - 它不是遊戲的SVN部分
不在Tortoise本身,但你可以在各種shell腳本中使用命令行版本的Subversion客戶端。在殼牌,它會是東西這樣:
$ find . \(-name ".svn" -prune -false \) -o -type f | while read file
do
newFile=${file%??}
svn mv $file $newFile
done
您可以使用它現在包含在大多數Windows平臺(雖然你可能必須先安裝.NET PowerShell中做同樣的事情)。除非我真的不知道Powershell,否則我會給你這種語法。
這是我告訴人們學習Subversion命令行的原因之一。它可以極大地擴展Subversion執行這樣的任務的能力。
語法上給出的是基礎,沒有隱性擔保,這是正確的。用戶承擔運行所述語法的所有責任。法官的所有決定都是最終的。在法律禁止的情況下提供無效。
上@ DavidW的回答跟進,這裏是基本的PowerShell序列做到這一點:
Get-ChildItem . | % { svn mv $_.name ($_.name -replace '..\.','.') }
這將在討論的特定樣本的工作,但其中一個文件名就會在角落的情況下失敗包含多個點,例如像「ProjectX.MyFileXY.c」。無論是以下兩個正則表達式都比較健全,可以處理多個點(這也說明了如何快速測試正則表達式/隔離替換操作):
"ProjectX.MyFileXY.c" -replace '..\.(?=[^.]*$)','.'
"ProjectX.MyFileXY.c" -replace '..(\.[^.]*?)$','$1'
儘管這個問題只要求在處理文件目前目錄,大衛包括處理後裔,所以我想我應該概括我的解決方案以及並行性。 一般的解決方法 - 檢查紮根在當前目錄下的子樹 - 需要增加只是一對夫婦的參數傳遞給Get-ChildItem(我也換在這裏更強大的regexs之一):
Get-ChildItem . -Recurse -NoContainer |
% { svn mv $_.name ($_.name -replace '..\.(?=[^.]*$)','.') }
但這不是修剪私人.svn
目錄,因爲大衛已完成Linux find
命令。由於Get-ChildItem
沒有這種選項,我在我的開源庫中添加了一個增強版本(Get-EnhancedChildItem)(下載here),其中包含一些附加參數; -ExcludeTree
相當於-prune
:
Get-EnhancedChildItem . -ExcludeTree .svn -Recurse -NoContainer |
% { svn mv $_.name ($_.name -replace '..\.(?=[^.]*$)','.') }
最後,我增強了小命令提供了可用於不只是忽略Subversion的私有目錄而是忽略不是在顛覆任何文件,即使一個進一步的選項(-Svn
)源代碼控制:
Get-EnhancedChildItem . -Svn -Recurse -NoContainer |
% { svn mv $_.name ($_.name -replace '..\.(?=[^.]*$)','.') }
謝謝。我會做一個PowerShell的答案,但我剛剛在上週四開始學習它,並可能將其用於這個單一的工作,而不再使用它。它肯定比CMD shell的語法更好,但我寧願使用Python或Perl。 – 2012-04-04 15:19:39
如果我沒有Subversion,我可以使用當前已安裝的TortoiseSVN客戶端來安裝它嗎? – SSS 2012-04-02 23:11:49
如果你有TortoiseSVN 1.7,你已經有了Subversion命令行工具 - 所以你不需要安裝任何東西。只需檢查TortoiseSVN下的bin目錄即可。另請注意,David的腳本(即'find'命令)適用於Linux/Unix,不適用於Windows。 – 2012-04-03 00:23:59