2009-10-23 5 views
1

내 bash 스크립팅이 약합니다. 나는 필터링하고 svn에 파일을 추가하는 스크립트를 만들고 싶다.필터를 사용하여 SVN에 파일을 추가하는 스크립트

지금까지 나는이

ls | egrep -v "(\.tab\.|\.yy\.|\.o$|\.exe$|~$)" 

내가이 간부를 사용하여 출력하려고했지만 방법을 알아낼을 couldnt 있습니다. 그 전에 svn add가 regex를 사용하는지 확인했습니다. 나는 그것이 확실하고 -v가없는 경우 위의 내용을 역전시킬 수 없다는 것을 확신하지 못한다. (예 : "[^((\.tab\.|\.yy\.|\.o$|\.exe$|~$))]") 예상대로 작동하지 않는다. (단지 .tab 파일을 무시하는 것 같다)

어떻게해야합니까? 필터를 적용한 후 svn에 파일을 추가하는 스크립트를 만드시겠습니까? 이것이 가장 간단한 방법일까요? -> ls, grep을 사용하여 bash 배열에 넣고 foreach에 svn add $ 요소를 사용합니까?

참고 : 이것은 리눅스를 사용하고 있습니다. 저는이 기능을 윈도우에서 실행한다고 생각하지 않습니다. 왜냐하면 대부분의 리눅스 배포판에서 작동하는 한 행복하기 때문입니다. 위의 사실을 무시하십시오 .exe

답변

2

여러 가지 방법 :

  1. 사용 역 따옴표 : svn add`의`1! | egrep을 물건

  2. 사용 xargs를 : ls | egrep stuff | xargs svn add

  3. 사용 찾아서 xargs를 : 분명히 find . -type f -name *.c -print | grep -v '\.svn' | xargs svn add

변경 "물건"과 "-name *이 .c"는 요구 사항에 맞게합니다. ..

+0

두 번째 방법에서 xargs는 줄 바꿈으로 구분 된 ls 출력에 질식하는 것 같습니다. 적어도 내 컴퓨터에서 (우분투 12.04). –

1

찾기를 사용해보십시오.

find <pattern> -prune .svn -exec svn add {} \;

다음 간부는 각 파일에 대해 실행되고 {}이 각각의 반복에서 파일 이름으로 대체됩니다 명령.

나는 내 리눅스 시스템 앞에 있지 않으므로 지금 당장 필요로하는 패턴을 얻을 수는 없지만 그 사람을 읽는다면 거기에 도달 할 수있다.

+0

당신 (또는 누구든지)이 내 대답을 무시하는 방법을 말해 줄 수 있다면 .svn 폴더는 정답입니다. –

+0

위의 내용을 테스트하지는 않았지만 .svn 폴더를 무시하려면 패턴 뒤 (또는 전)에 -prune 스위치를 사용하십시오. – antik

1

다른 해결책은 SVN 무시 패턴에 파일 확장명과 .svn 폴더를 추가하는 것입니다.

클라이언트로 설정하면 svn add *을 수행하고 SVN에 원하는 것을 얻을 수 있습니다.

관련 문제