/ 의 cut
출력을 리디렉션 하고 그 사이에 파일 이름 변환을 적용해야 합니다 .find
scp
배경:
버전 관리를 위해 투명 케이스를 사용하고 있습니다. feature
브랜치 에 있는 모든 파일 과 원본 버전을 다른 컴퓨터로 전송 /Main
하고 싶습니다 .scp
feature
/Main
나는 지점에서 변경한 파일을 나열하는 명령을 알고 feature
있으며 원본도 얻을 수 있습니다.
내가 시도한 것은 다음과 같습니다.
filefinder
지점의 파일을 나열하기 위해 별칭을 만들었습니다 .
find
이는 분기의 모든 파일을 찾는 데 사용됩니다 feature
.
$ filefinder `feature` | cut -d '/' -f 2 -
a.c
b.c
c.h
d.h
예를 들어 내가 시도하면
$ scp $(filefinder KERN_414_A64 | cut -d '/' -f 2) test@ip:/path/
scp
지점 의 모든 파일을 가져올 수 있습니다 feature
.
필요하다:
/main/latest
파일의 버전을 얻으려면 . 파일 이름을 다음으로 변경해야했습니다.
a.c@@/Main
b.c@@/Main
c.h@@/Main
그런 다음scp
그것들문서. 따라서 기본적으로 find
/command의 출력을 편집하기 전에 cut
편집하십시오 .scp
아무것도 작동하지 않으면 분기를 로 변경할 수 있지만 /Main/latest
더 나은 방법을 찾으려고 노력합니다.
어떤 조언이라도 도움이 될 것입니다.
고쳐 쓰다
filefinder
별명:
cleartool find . -type f -branch "brtype($1)" -print | awk -F"@" '{print $1}'
감사해요!
답변1
구체적인 정의가 없으면 filefinder
다음과 같다고 가정하겠습니다(그러나 아래 업데이트 참조).
filefinder() { find "$1" -type f; }
이런 이름의 파일을 많이 복사하고 계시다면 조금 걱정이 됩니다.
a.c@@/Main
b.c@@/Main
c.h@@/Main
이름이 지정된 대상이 생성됩니다 . 따라서 대상은 다음과 같이 유지되어야 한다고 Main
가정합니다 .a.c@@/Main
a.c
filefinder
이제 파일을 사용하는 대신 한 번의 작업으로 파일을 복사할 수 있습니다. filefinder
(위)와 같이 매개변수화할 수 있도록 이 솔루션을 구축했습니다 .
filecopier() {
find "$1" -type f -exec bash -c '
for file in "$@"
do
file="${file#*/}"
echo scp -p "${file}@@/Main" test@ip:"/path/${file##*/}"
done
' _ {} +
}
명령이 정확하다고 생각되면 삭제하십시오 echo
.scp
filefinder
그래서 생각보다 간단하지 않은 것 같아요 . 그럼에도 불구하고 우리는 여전히 다음과 같은 것을 사용할 수 있습니다
filefinder ... |
while IFS= read -r file
do
echo scp -p "${file}@@/Main" test@ip:"/path/${file##*/}"
done
이는 파일 이름이 줄 바꿈과 같은 어색한 문자 없이 한 줄에 하나씩 있다고 가정합니다.