2013-06-26 3 views
1

우리 팀은 개정 관리를 위해 CVS를 사용합니다. 파일에서 내용을 추출하고 모든 .txt 파일 (CVS 태그 포함)에 쉘 스크립트를 개발해야합니다. 현재 디렉터리의 하위 디렉터리)를 해당 내용과 비교합니다. 내용을 추출한 파일 인 스크립트는 모두 동일한 디렉토리에 있습니다. CVS 쉘 스크립트 내에서 반복적으로 태그 달기

나는 스크립트를 실행하려고 :

#!bin/bash 
return_content(){ 
    content=$(cat file1) 
    echo $content 
} 
find . -name "*.txt" -type f -print0|grep - v CVS|xargs -0 cvs tag $content 

파일 1 => 내용이 추출되는 위치에서 파일 "ABC"=> 내용

출력 파일 1 내부 :

abc 
find: paths must precede expression 
Usage: find [path...] [expression] 
cvs tag: in directory 
cvs [tag aborted]: there is no version here; run 'cvs checkout' first 

나는 그 문제를 알아낼 수 없다. 도와주세요

+1

왜 태그에 ** 모든 ** 파일에 해당 태그가 태그되지 않습니까? 이것이 CVS 작업 디렉토리에서 실행되고 있습니까? –

+0

네 ina Cvs 디렉토리 .. 그 요구 사항은 txt 파일에만 태그해야합니다. – user2475677

답변

2

스크립트에 몇 가지 문제가 있습니다.

1)시 뱅 라인에 root /가 없습니다. 당신은 #!bin/bash 가지고 있고 그것은 그렙에 -v 옵션은 공간 사이가

2) #!/bin/bash해야한다 - 그리고 V를 (그리고)

3) 당신은 실제로 return_content를 호출하지 않는 안 함수의 마지막 라인에서 함수 내에서 변수를 참조하십시오. 같은 아마도 마지막 줄이 보일 것입니다 : 심지어 모든 것을 해결 한 후, 당신은 print0이 (가 인해 -print0에 널 (null)을 포함하는) 그것을 바이너리 데이터를 전달하기 때문에 grep을 불평 찾을 수 있습니다

find . -name "*.txt" -type f -print0|grep -v CVS|\ 
    xargs -0 cvs tag $(return_content) 

4) grep이 텍스트를 기다리고 있습니다. 이 같은 밖으로 grep으로 grep 명령의 기능을 수행하고 잘라 find 명령에 더 많은 인수를 사용할 수 있습니다

find . -type d -name CVS -prune -o -type f -name "*.txt" -print0 |\ 
    xargs -0 cvs tag $(return_content) 

발견 (아래 등) 현재 디렉토리에있는 모든 항목을 재귀 적, 아무것도 폐기 CVS 이하의 디렉토리이며 나머지는 * .txt 파일 만 선택합니다.

[email protected]:~/junk/find$ find . -type d -name CVS -prune -o \ 
-type f -name "*.txt" -print0 | xargs -t -0 ls -la 
ls -la ./one two.txt ./three four.txt 
-rw-r--r-- 1 bjb bjb 0 Jun 27 00:44 ./one two.txt 
-rw-r--r-- 1 bjb bjb 0 Jun 27 00:45 ./three four.txt 
[email protected]:~/junk/find$ 
: 스크립트가 결과를 보여줄 것이다, 그래서 나는 디렉토리의 이름에 공백과가 .txt 확장자를 가진 파일의 몇 가지를 만들어

find . -type d -name CVS -prune -o -type f -name "*.txt" -print0 |\ 
xargs -t -0 echo ls -la 

:

내가 가진 그 라인의 내 버전을 테스트

-t 인수를 사용하면 xargs가 실행하려고하는 명령을 표시합니다. 나는 cvs tag 대신에 ls -la을 사용했습니다. 이것은 cvs와 비슷하게 작동합니다.

+0

네,이 작품! 나는 마지막 시간에 실제로 실수를하고 있었다! 자세한 답장을 보내 주셔서 감사합니다. – user2475677

관련 문제