scp를 사용하여 dir을 재귀 적으로 복사 할 때 파일을 필터링하는 방법은 무엇입니까?
모든 .class 파일을 서버에서 로컬로 모든 디렉토리가 예약 된 상태로 복사해야합니다. 예를 들어이 server:/usr/some/unknown/number/of/sub/folders/me.class
될 것입니다 /usr/project/backup/some/unknown/number/of/sub/folders/me.class
내가 원하는하지 않는 등을 .svn베이스 파일과 같은 다른 많은 쓸모없는 파일이 있습니다 문제입니다. scp
.class 파일 만 필터링하려면 어떻게해야 합니까?
아마 같은 것을 사용하는 것이 좋습니다 거라고 rsync
는이 때문에 위해를 include
하고 exclude
, 플래그 예를 -
rsync -rav -e ssh --include '*/' --include='*.class' --exclude='*' \
server:/usr/some/unknown/number/of/sub/folders/ \
/usr/project/backup/some/unknown/number/of/sub/folders/
기타 유용한 플래그 :
-r
재귀 용-a
아카이브 용 (대부분 모든 파일)-v
자세한 출력-e
기본값 대신 ssh를 지정하려면 (실제로는 ssh 여야 함)
기본 디렉토리에서 도트 파일을 제외하려면 :
scp -r [!.]* server:/path/to/something
[!.]*
점으로 시작하지 않는 작업 디렉토리의 모든 파일로 확장되는 쉘 glob입니다.
scp에는 파일을 필터링하는 기능이 없습니다. 이와 같은 "고급"항목의 경우 rsync를 사용하는 것이 좋습니다.
rsync -av --exclude '*.svn' user@server:/my/dir .
(이 줄은 먼 폴더에서 현재 폴더로 rsync를 복사합니다)
ssh 연결을 통한 최신 버전의 rsync 터널은 기본적으로 자동으로 제공됩니다.
당신이 할 수 있기 때문에 scp
당신에게 확인을해야 ssh
,
중 스크립트는 다음 또는 로그인 및 실행 ...
# After reaching the server of interest
cd /usr/some/unknown/number/of/sub/folders
tar cfj pack.tar.bz2 $(find . -type f -name *.class)
로컬 서버로 돌아 가기 (로그 아웃) 및 scp
,
# from the local machine
cd /usr/project/backup/some/unknown/number/of/sub/folders
scp you@server:/usr/some/unknown/number/of/sub/folders/pack.tar.bz2 .
tar xfj pack.tar.bz2
당신이 찾을 경우 $(find ...)
로 타르 변화를 너무 깁니다,
find . -type f -name *.class | xargs tar cfj pack.tar.bz2
마지막으로,에서 보관하고 /usr/project/backup/
있는데
왜 추출이 귀찮습니까? tar.bz2
날짜 + 타임 스탬프와 함께을 유지하십시오 .
ssh 키 기반 인증을 사용하면 다음 스크립트가 작동합니다.
for x in `ssh user@remotehost 'find /usr/some -type f -name *.class'`; do y=$(echo $x|sed 's/.[^/]*$//'|sed "s/^\/usr//"); mkdir -p /usr/project/backup$y; scp $(echo 'user@remotehost:'$x) /usr/project/backup$y/; done
파일에 대한 아래 명령.
scp`find. -maxdepth 1-이름 "* .log"\! -name "hs_err_pid2801.log"-type f` root @ IP : / tmp / test /
- IP는 대상 서버 IP 주소가됩니다.
- 포함 파일의 경우 -name "* .log".
- \! 제외 파일의 경우 -name "hs_err_pid2801.log"
- . 현재 작업 디렉토리입니다.
- -파일 유형의 경우 f를 입력합니다.
디렉토리 명령 아래.
scp -r`find. -maxdepth 1-이름 "lo *"\! -name "localhost"-type d` root @ IP : / tmp / test /
요구 사항에 따라 위의 명령을 사용자 지정할 수 있습니다.
실제로 scp를 사용하려면 간접적 인 방법이 있습니다. 로컬 폴더 '/ src'아래에있는 모든 .jpg 파일을 원격 서버 10.1.1.2의 '/ dst'폴더에 복사하고 싶다고 가정 해 보겠습니다.
#make a clean temp folder
mkdir /tmp/ttt
#copy all .jpg file and retain folder structure as-is
find /src -type f -name *.jpg -exec cp --parents \{\} /tmp/ttt \;
#copy to remote target folder as-is and retain original time attributes
scp -rp /tmp/ttt/* 10.1.1.2:/dst
#if copy ok, remove temp folder
rm -rf /tmp/ttt
소스 폴더를
somedir
다음 위치에 복사하십시오 .cp -r
srcdir
somedir
불필요한 파일을 모두 제거하십시오.
find somedir -name '.svn'-exec rm -rf {} \ +
scp 시작
somedir
'Programing' 카테고리의 다른 글
반올림하지 않고 소수점 두 자리 자르기 (0) | 2020.08.29 |
---|---|
EditText에서 오류 제거 (0) | 2020.08.29 |
ARC는 디스패치 대기열을 지원합니까? (0) | 2020.08.29 |
백그라운드 프로세스로 서버에서 Java jar 파일 실행 (0) | 2020.08.29 |
Android Studio 이미지 자산 실행기 아이콘 배경색 (0) | 2020.08.29 |