정규 표현식을 사용하여 TortoiseSVN의 디렉토리에있는 모든 파일의 이름을 바꿀 수 있습니까?SVN 정규 표현식을 사용하여 디렉토리의 모든 파일 이름 바꾸기
기본적으로 .extension 앞에 파일 이름의 마지막 두 문자를 제거하고 싶습니다. 예를 들어
,MyFileXY.c
MyOtherFile12.c
로 변경 :
MyFile.c
MyOtherFile.c
정규 표현식을 사용하여 TortoiseSVN의 디렉토리에있는 모든 파일의 이름을 바꿀 수 있습니까?SVN 정규 표현식을 사용하여 디렉토리의 모든 파일 이름 바꾸기
기본적으로 .extension 앞에 파일 이름의 마지막 두 문자를 제거하고 싶습니다. 예를 들어
,MyFileXY.c
MyOtherFile12.c
로 변경 :
MyFile.c
MyOtherFile.c
나는 일반 표현식을 사용하여 TortoiseSVN이있는 디렉토리에있는 모든 파일의 이름을 바꿀 수 있습니까?
번호 SRC와 svn move
에서 DST가 쉘은 트리밍을 수행 할 수있는 경우 문자열
상수, 당신은 어쨌든 SVN 명령 내부 결과를 사용하려고하지만, 수 - 그렇지 않다 게임의 SVN 부분
Tortoise 자체에서는 아니지만 Subversion 클라이언트의 명령 줄 버전을 사용하여 다양한 셸 스크립트에서 수행 할 수 있습니다.
$ find . \(-name ".svn" -prune -false \) -o -type f | while read file
do
newFile=${file%??}
svn mv $file $newFile
done
당신은 당신이 먼저 .NET을 설치해야 할 수도 있지만 지금은 (대부분의 Windows 플랫폼에 포함되어 PowerShell을 사용하여 비슷한 작업을 수행 할 수 있습니다 쉘에서는이 같은1일 것). 나는 Powershell을 정말로 모르는 것을 제외하고는 그 구문을 제공 할 것입니다.
이것은 사람들에게 Subversion 명령 줄을 배우게하는 이유 중 하나입니다. Subversion의 기능을 크게 확장하여 이와 같은 작업을 수행 할 수 있습니다. 기초하고 정확하다는 암시 적 보증이 없기 때문에
1구문
는 DavidW의 대답 @ 위로 다음, 여기에이 작업을 수행하는 기본 PowerShell을 순서입니다 :
Get-ChildItem . | % { svn mv $_.name ($_.name -replace '..\.','.') }
이이 문제의 특정 샘플 작동하지만 여기서 파일 이름은 코너 케이스에 실패합니다 여러 개의 점들이 들어 있습니다. "ProjectX.MyFileXY.c"와 같은 것입니다. 아래 두 개의 정규 표현식 중 하나가 더 강력하고 여러 점을 처리합니다 (이 신속/정규 표현식을 테스트 단독으로 작업을 대체하는 방법을 보여줍니다) : 질문 만의 파일을 처리하기위한 요구
"ProjectX.MyFileXY.c" -replace '..\.(?=[^.]*$)','.'
"ProjectX.MyFileXY.c" -replace '..(\.[^.]*?)$','$1'
있지만 현재 디렉토리에 데이비드가 포함되어 있으므로 병렬 처리를 위해 내 솔루션을 일반화해야한다고 생각했습니다.
Get-ChildItem . -Recurse -NoContainer |
% { svn mv $_.name ($_.name -replace '..\.(?=[^.]*$)','.') }
하지만이 : 일반적인 솔루션 - - 현재 디렉토리를 루트로하는 서브 트리를 검사하는 (나는 또한 여기에보다 강력한 정규식 등에서 특정 요소를 뽑아 오기 중 하나를 교체 한)-ChildItem을 얻기 위해 단지 몇 가지 매개 변수를 추가 필요 은 prune private .svn
디렉토리가 아닙니다. David는 Linux find
명령을 사용하여 수행했습니다. Get-ChildItem
에는 그러한 옵션이 없으므로 몇 가지 추가 매개 변수가 포함 된 내 오픈 소스 라이브러리 (here)에 향상된 버전 (Get-EnhancedChildItem)을 추가했습니다. -ExcludeTree
는 -prune
하는 것과 같습니다
Get-EnhancedChildItem . -ExcludeTree .svn -Recurse -NoContainer |
% { svn mv $_.name ($_.name -replace '..\.(?=[^.]*$)','.') }
, 내 강화 된 cmdlet을 그냥 Subversion의 개인 디렉토리를 무시하지하기 위해 사용될 수있다 오히려 파괴를받지 않는 어떤 파일을 무시도 하나 추가 옵션 (-Svn
)를 제공 소스 제어 :
Get-EnhancedChildItem . -Svn -Recurse -NoContainer |
% { svn mv $_.name ($_.name -replace '..\.(?=[^.]*$)','.') }
감사합니다. 나는 PowerShell 응답을했을 텐데, 나는 지난 목요일에 그것을 배우기 시작했고 아마이 단일 작업을 위해 그것을 사용할 것이고 다시는 사용하지 않을 것이다. 분명히 CMD 셸 구문보다 낫지 만 Python이나 Perl을 사용하고 싶습니다. –
Subversion을 설치할 수없는 경우 기존에 설치된 TortoiseSVN 클라이언트에 설치할 수 있습니까? – SSS
TortoiseSVN 1.7을 이미 사용하고 있다면 Subversion 명령 줄 유틸리티가 있으므로 아무 것도 설치할 필요가 없습니다. TortoiseSVN 아래 bin 디렉토리를 확인하십시오. David의 스크립트 (즉,'find' 명령)는 Windows가 아닌 Linux/Unix 용입니다. –