Linux의 여러 디렉터리에서 여러 파일을 rsync

Linux의 여러 디렉터리에서 여러 파일을 rsync

BRO IDS의 여러 log.gz 파일과 함께 날짜별로 이름이 지정된 여러 디렉터리(예: 2017-09-05)가 있습니다. 각 디렉토리로 이동하여 이름별로 특정 log.gz 파일만 가져온 다음 rsync를 사용하여 원격 시스템으로 보내려고 합니다. 로그 파일은 다음과 같습니다. dns.00:00:00-01:00:00.log.gz이 작업을 수행하기 위해 와일드카드를 사용하려고 합니다.

전임자:rsync -avh --ignore-existing -e ssh -r /home/data/logs/2017-09-* {dns,http}.*.log.gz / [email protected]:/home/pnlogs/

이것은 가깝지만 각 폴더의 모든 파일을 복사하고 가져오려는 시도를 무시합니다.오직http 및 dns 로그가 예제에 표시되어 있습니다. 이 작업을 한 줄로 수행할 수 있습니까? 더 좋은 방법이 있나요?

이상적으로는 전송하는 동안 파일을 원래 디렉터리에 유지하고 싶습니다. 예를 들어 원래 명령에서는 디렉터리가 원격 시스템에 남아 있습니다. 이는 조직에 좋은 일입니다. 흥미롭게도 이 명령은 이번 달 3일, 4일, 5일의 로그가 아닌 2017-09-01 및 2017-09-02의 HTTP 및 DNS 로그를 복사합니다.

월/연도 변경 사항에 대해 어떻게 조정합니까? 이것은 스크립트에 포함될 것이며 매월 $date(예: 2017-10 등)로 변경하고 싶지 않습니까?

작동했습니다. 모든 도움을 주셔서 감사합니다.rsync -avhR $(date +????-??-??)/{dns,http,conn}.*.log.gz [email protected]:/home/pnlogs/

답변1

당신의 명령을 보자

rsync -avh --ignore-existing -e ssh -r /home/data/logs/2017-09-*  {dns,http}.*.log.gz / [email protected]:/home/pnlogs/

컬렉션 소스는 다음 네 가지 경로와 일치하는 모든 파일입니다(재귀가 활성화되어 있지만 -r실제로는 수행됨).-a

  • /home/data/logs/2017-09-*
  • dns.*.log.gz
  • http.*.log.gz
  • /

마지막 것은 rsync명령이 모든 것을 복사하려고 시도하는지 확인합니다.

복사하려는 것은 YYYY-MM-DD 폴더 내의 모든 DNS 및 HTTP 로그 파일이며 디렉터리 구조를 유지하는 것 같습니다.

cd /home/data/logs &&
rsync -avhR 2017-09-*/{dns,http}.*.log.gz [email protected]:/home/pnlogs/

--ignore-existing당신이 없으면 나는 그것을 사용하지 않을 것입니다정말 강하다왜 이 일을 하고 싶은지 알아보세요. (이 플래그는 rsync부분 전송이 다시 시작되는 것을 방지합니다. 그렇게 하지 않으면 --partial문제가 될 수 있습니다.)

-r사용 중이고 -a이 아카이브 모드에 이미 재귀가 포함되어 있으므로 그럴 필요가 없습니다 . 그러나 귀하의 요구 사항을 올바르게 해석하면 어쨌든 재귀가 없습니다.

-R플래그는 rsync대상의 소스 트리에서 상대 경로를 유지하도록 지시합니다. 나는 cd유용한 시작점에 명령을 두곤 했습니다. 그렇지 않으면 /home/data/logs대상 경로에도 포함되게 되기 때문입니다. ( ... )실행되는 나머지 스크립트에 디렉터리 변경 사항이 적용되지 않도록 하려면 해당 내용을 모두 괄호로 묶으세요.

관련 정보