재귀 적으로 scp를 사용하지만 일부 폴더는 제외
이러한 구조를 가진 폴더가 있다고 가정합니다.
/bench1/1cpu/p_0/image/
/bench1/1cpu/p_0/fl_1/
/bench1/1cpu/p_0/fl_1/
/bench1/1cpu/p_0/fl_1/
/bench1/1cpu/p_0/fl_1/
/bench1/1cpu/p_1/image/
/bench1/1cpu/p_1/fl_1/
/bench1/1cpu/p_1/fl_1/
/bench1/1cpu/p_1/fl_1/
/bench1/1cpu/p_1/fl_1/
/bench1/2cpu/p_0/image/
/bench1/2cpu/p_0/fl_1/
/bench1/2cpu/p_0/fl_1/
/bench1/2cpu/p_0/fl_1/
/bench1/2cpu/p_0/fl_1/
/bench1/2cpu/p_1/image/
/bench1/2cpu/p_1/fl_1/
/bench1/2cpu/p_1/fl_1/
/bench1/2cpu/p_1/fl_1/
/bench1/2cpu/p_1/fl_1/
....
내가하고 싶은 scp
것은 다음 폴더에
/bench1/1cpu/p_0/image/
/bench1/1cpu/p_1/image/
/bench1/2cpu/p_0/image/
/bench1/2cpu/p_1/image/
보시다시피 scp
"fl_X"라는 이름의 모든 폴더를 제외하고 재귀 적으로 사용하고 싶습니다 . scp에는 그러한 옵션이없는 것 같습니다.
UPDATE scp에는 그러한 기능이 없습니다. 대신 다음 명령을 사용합니다.
rsync -av --exclude 'fl_*' user@server:/my/dir
하지만 작동하지 않습니다. 폴더 목록 만 전송 !! 뭔가ls -R
옵션으로 scp
재귀 디렉토리 복사를 지원 하지만 -r
파일 필터링은 지원하지 않습니다. 이 당신의 작업을 수행하는 방법에는 여러 가지가 있지만, 아마도에 의존하는 것 find
, xargs
, tar
, 그리고 ssh
대신 scp
.
find . -type d -wholename '*bench*/image' \
| xargs tar cf - \
| ssh user@remote tar xf - -C /my/dir
rsync
솔루션은 작업을 할 수 있지만, 당신은 몇 가지 인수가 누락되었습니다. rsync
또한 r
하위 디렉터리로 재귀 하는 스위치가 필요합니다 . 또한에서 동일한 보안을 원하면 scp
에서 전송해야합니다 ssh
. 다음과 같은 것 :
rsync -avr -e "ssh -l user" --exclude 'fl_*' ./bench* remote:/my/dir
가장 간단한 옵션 (원격 호스트에 rsync 설치)이 가능하지 않다고 가정하면 sshfs 를 사용 하여 원격을 로컬로 마운트하고 마운트 디렉토리에서 rsync 를 사용할 수 있습니다 . 이렇게하면 rsync가 제공하는 모든 옵션을 사용할 수 있습니다 (예 : --exclude
.
다음과 같이해야합니다.
sshfs user@server: sshfsdir
rsync --recursive --exclude=whatever sshfsdir/path/on/server /where/to/store
rsync의 효율성 (모든 것이 아닌 변경 사항 만 전송)은 여기에 적용되지 않습니다. 이것이 작동하려면 rsync가 변경된 내용을 확인하기 위해 모든 파일의 내용을 읽어야하기 때문입니다. 그러나 rsync는 하나의 호스트에서만 실행되므로 전체 파일을 sshfs로 전송해야합니다. 그러나 제외 된 파일은 전송해서는 안됩니다.
GLOBIGNORE를 내보내고 "*"를 사용할 수 있습니다.
export GLOBIGNORE='ignore1:ignore2'
scp -r source/* remoteurl:remoteDir
pem 파일을 사용하여 인증하는 경우 다음 명령을 사용할 수 있습니다 (확장자가있는 파일 제외).
rsync -Lavz -e "ssh -i <full-path-to-pem> -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --exclude "*.something" --progress <path inside local host> <user>@<host>:<path inside remote host>
-L은 링크를 따르는 것을 의미합니다 (링크가 아닌 파일 복사). 상대가 아닌 pem 파일의 전체 경로를 사용하십시오.
sshfs는 느리게 작동하므로 사용하지 않는 것이 좋습니다. 또한 위에 제시된 find와 scp의 조합은 너무 비싸서 파일 당 ssh 세션을 열기 때문에 나쁜 생각입니다.
You can use extended globbing as in the example below:
#Enable extglob
shopt -s extglob
cp -rv !(./excludeme/*.jpg) /var/destination
This one works fine for me as the directories structure is not important for me.
scp -r USER@HOSTNAME:~/bench1/?cpu/p_?/image/ .
Assuming /bench1
is in the home directory of the current user. Also, change USER and HOSTNAME to the real values.
ReferenceURL : https://stackoverflow.com/questions/15121337/recursively-use-scp-but-excluding-some-folders
'programing' 카테고리의 다른 글
.net 응용 프로그램에서 SQL Server 시간 데이터 형식을 사용하는 방법은 무엇입니까? (0) | 2021.01.15 |
---|---|
Android 데이터베이스를 온라인 SQL Server와 동기화하는 방법은 무엇입니까? (0) | 2021.01.15 |
Microsoft.Web.Administration을 참조하는 방법은 무엇입니까? (0) | 2021.01.15 |
getter 전용 자동 속성과 표현식 본문 속성의 차이점은 무엇입니까? (0) | 2021.01.15 |
ASP.NET Core MVC 개발에 AddMvc 또는 AddMvcCore를 사용해야합니까? (0) | 2021.01.15 |