동일한 경로에 있는 파일을 원격으로 복사

동일한 경로에 있는 파일을 원격으로 복사

일부 디렉토리에는 수천 개의 CSV 파일이 있습니다. csv 파일 중 하나를 동일한 경로의 원격 시스템에 복사하고 싶습니다. 원격 시스템에 디렉토리가 없으면 디렉토리를 생성하여 해당 경로에 복사해야 합니다.

foo.csv예를 들어 자세히 설명하겠습니다. 일부 디렉터리에 라는 파일이 있다고 가정해 보겠습니다.

test/
├── 201512
    └── foo.csv
    └── bar.csv
├── 201601
    └── foo.csv
    └── abc.csv 
├── 201602
    └── foo.csv
    └── xyz.csv
.
.
├── 201612
    └── foo.csv
    └── asd.csv

foo.csv원본 컴퓨터와 동일한 경로에 있는 원격 컴퓨터에 복사 하고 싶습니다 . 따라서 리모콘의 동일한 경로 /test/201512/foo.csv에 복사해야 합니다 . /test/201512/원격 시스템에 디렉터리 경로가 없으면 새로 만들어야 합니다. 이를 달성하기 위한 유틸리티가 있습니까 rsync?scp

(노트: 모든 디렉토리의 내용은 foo.csv다를 수 있습니다)

답변1

내 Vagrant 상자에서 설정이 완료되었습니다.

$ mkdir -p test/20{1512,16{01..12}}
$ for d in !$; do printf 'I am a csv file in %s\n' "$d" > "$d"/foo.csv; printf 'I am a different file; do not copy me!\n' > "$d"/abc.csv; done

설정 후 디렉토리 구조:

[vagrant@localhost ~]$ tree test
test
├── 201512
│   ├── abc.csv
│   └── foo.csv
├── 201601
│   ├── abc.csv
│   └── foo.csv
├── 201602
│   ├── abc.csv
│   └── foo.csv
├── 201603
│   ├── abc.csv
│   └── foo.csv
├── 201604
│   ├── abc.csv
│   └── foo.csv
├── 201605
│   ├── abc.csv
│   └── foo.csv
├── 201606
│   ├── abc.csv
│   └── foo.csv
├── 201607
│   ├── abc.csv
│   └── foo.csv
├── 201608
│   ├── abc.csv
│   └── foo.csv
├── 201609
│   ├── abc.csv
│   └── foo.csv
├── 201610
│   ├── abc.csv
│   └── foo.csv
├── 201611
│   ├── abc.csv
│   └── foo.csv
└── 201612
    ├── abc.csv
    └── foo.csv

13 directories, 26 files
[vagrant@localhost ~]$ cat test/201609/foo.csv 
I am a csv file in test/201609
[vagrant@localhost ~]$ 

다음으로 내 상자에서(잃어버린 상자가 아님):

rsync -ame 'ssh -p 2222' -f '+ */' -f '+ foo.csv' -f '- *' [email protected]:/home/vagrant/test .

결과:

$ find test
test
test/201512
test/201512/foo.csv
test/201601
test/201601/foo.csv
test/201602
test/201602/foo.csv
test/201603
test/201603/foo.csv
test/201604
test/201604/foo.csv
test/201605
test/201605/foo.csv
test/201606
test/201606/foo.csv
test/201607
test/201607/foo.csv
test/201608
test/201608/foo.csv
test/201609
test/201609/foo.csv
test/201610
test/201610/foo.csv
test/201611
test/201611/foo.csv
test/201612
test/201612/foo.csv

옵션 참고 사항 rsync:

사용된 명령은 다음과 같습니다.

rsync -ame 'ssh -p 2222' -f '+ */' -f '+ foo.csv' -f '- *' [email protected]:/home/vagrant/test .

-a"아카이브" 스위치는 디렉터리를 재귀적으로 복사하고 권한을 보존하는 등의 작업을 의미합니다.

-m이는 빈 디렉토리가 복사되지 않음을 의미합니다(예: 날짜 디렉토리 중 하나가 누락된 경우 foo.csv해당 디렉토리를 생성하지 않습니다).

-e 'ssh -p 2222'Vagrant 박스를 사용하고 있기 때문에 SSH 포트가 포트 22와 다르기 때문에 이 부분은 생략할 수 있습니다.

-f"필터" 규칙을 도입합니다. 파일을 포함하거나 제외할 수 있습니다. 내가 사용하고 있는 필터는 설명이 매우 간단해야 하지만 필터를 명확하게 하려면 파일이 '+ */'검색되도록 모든 디렉터리를 포함해야 합니다.foo.csv도착하다.

이에 대한 자세한 내용은 매뉴얼 페이지를 참조하세요:

LESS='+/INCLUDE\/EXCLUDE PATTERN RULES' man rsync

관련 정보