svn을 쓰다보면 하위 디렉토리의 파일들 중에 저장소에 들어있지 않은 것만 골라서 svn add를 하고싶을 때가 있다. 새로 만든 파일이 엄청 많거나, 새로운 버전을 다운로드해서 덮어썼더니 새로 생긴 파일들이 많아서 그럴 때도 있고. 이 파일들은 svn st/svn status 명령으로 쉽게 확인을 할 수 있지만 일일이 svn add를 하려면 여간 성가신게 아니다. 그럴때.

svn st | grep '^?' | sed 's/^? *//' | xargs svn add

대단한 건 아닌데, 유닉스셸에 익숙치 않은 분들을 위해 약간 설명을 보태자면

svn st를 하면 저장소에 안 들어있는(버전관리 대상이 아닌) 파일은 물음표(?)로 표시된다. grep으로 첫 글자가 ?로 시작하는 라인만 걸러낸다. 그 다음에 sed로 ?와 그 뒤에 따라오는 공백문자만 없애버린다. 여기까지 하면 svn add를 해야 할 파일명만 걸러낼 수 있다. 이 다음에는 여러가지 방법을 쓸 수 있는데 xargs가 제일 간단한듯하다.

xargs는 앞에서 넘어온 내용을 뒤에 따라오는 명령의 arguments로 바꿔 준다. awk를 쓴 예제도 아래에 넣어봤다.

$ svn st
?      file
?      file2
M      file3
?      path1/path2/path3/file
M      blah/blah/foo/bar/filex
$ svn st | grep '^?'
?      file
?      file2
?      path1/path2/path3/file
$ svn st | grep '^?' | sed 's/^? *//'
file
file2
path1/path2/path3/file
$ svn st | grep '^?' | awk '{print $2}'  // 위의 sed와 같다
file
file2
path1/path2/path3/file

$ svn st | grep '^?' | sed 's/^? *//' | xargs svn add    ;방법1 : sed + xargs
( = svn add file file2 path1/path2/pathe/file )
$ svn st | grep '^A' | awk '{print "svn add", $2}' | sh  ;방법2 : awk + sh

응용하면 sed + sh로 갈 수도 있고 awk + xargs로 갈 수도 있고.

보너스. sed 갤러리(?) http://www.shell-fu.org/lister.php?tag=sed
신고
  1. Commented by BlogIcon 엘카이저 at 2014.01.02 11:10 신고

    너무 감사합니다.
    역시 이런 방법이 있을 것 같았습니다.ㅎㅎ

    git add . 같은 게 없어서 너무 이상했었거든요.