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
대상 경로에도 포함되게 되기 때문입니다. ( ... )
실행되는 나머지 스크립트에 디렉터리 변경 사항이 적용되지 않도록 하려면 해당 내용을 모두 괄호로 묶으세요.