본문 바로가기
IT/linux

linux svn status 중 ! 파일 전체 삭제 설명 및 예제

by 어느해겨울 2021. 12. 30.

svn status 중 ! 파일 전체 삭제

 

svn commit 전 svn status를 통해 파일들의 상태를 확인하는데 상태가 !(느낌표)인 경우가 있다.

이는 repository 에는 파일이 존재하지만 local 에는 파일이 존재하지 않는다는 표시인데,

필요가 없어서 지운 파일인 경우에는 repository에서도 delete를 해줘야 한다.

 

linux shell에서 svn 은 cli(command line interface) 특성상 delete를 하나하나 지정해줘야 하는 불편함이 있다.

몇 개 안되면 복사 붙여 넣기로 대충 처리할 텐데 수많은 파일이 삭제되고(!), 수많은 파일이 추가되고(A), 파일이 변경되고(M), repository에 없는 신규 파일이 생겼다던지(?) 그런 경우에는 delete 지정도 무척 곤욕이다.

 

그래서 linux pipe와 grep, awk, xargs를 조합하여 삭제된(!) 파일만 delete 지정하는 명령어를 만들어보았다.

 

예제

svn status | grep '^!' | awk '{print $2}' | xargs svn delete

설명

1. | 는 linux에서 이전에 실행된 결과를 | 다음으로 전달하는 역할을 한다.

   svn status 결과 -> grep '^!' -> ... 이런 과정을 거친다.

2. grep '^!'는 이전에 실행된 결과에서 정규 패턴 ^! 을 수행하겠단 것인데,

   ^ 는 start of 라는 뜻으로 !로 시작되는 문자열만 grep 하여 다음 커맨드로 넘기는 것이다.

3. awk '{print $2'} 는 !로 시작하는 문자열들 중에 awk로 $2 인자를 추출하여 출력하겠단 것이다.

   $2 인자는 파일명이 되겠다. 즉 추출된 문자열 중에 파일명만 추출하여 다시 파일명 목록을 만든 것이다.

4. xargs는 앞에서 전달한 결과를 인자로 사용한다. 그렇다면 3. 항목에서 만들어진 파일 목록을 가져오는 것인데,

   svn delete "파일명1 파일명2 파일명3 ..." 으로 인식하여 동작한다.

 

위와 같은 과정을 거쳐 손쉽게 많은 파일들 중 패턴으로 뽑아 처리를 해보았다.

삭제된 파일과 delete 외에 ?,A,M 등 다른 상태들도 처리가 가능하니 응용해보자.

 

 

 

 

 

 

댓글