rsync --delete가 대상 디렉터리의 대부분의 파일을 삭제했는데, 이유는 무엇입니까?

rsync --delete가 대상 디렉터리의 대부분의 파일을 삭제했는데, 이유는 무엇입니까?

/etcrsync를 수행할 때 셸 확장을 처리하지 않았기 때문에 내 폴더의 구성 파일이 모두 엉망이 되었습니다.

rsync --progress --delete -avhHe ssh /etc/logrotate.d/{httpd,mariadb,php-fpm,ppp,wpa_supplicant,yum} [email protected]:/etc

문제는 logrotate 다음에 나오는 "."이 확장되고 이후에 일부 폴더(예: /etc/httpd삭제됨)라는 것입니다.

나는 이 실수를 올바르게 수행함으로써 교훈을 얻고 싶습니다. ssh rsync 여러 파일을 사용할 때 쉘 확장을 방지하는 방법은 무엇입니까?

답변1

명령은 다음과 같이 요약됩니다.

rsync --delete --recursive /etc/logrotate.d/{httpd,mariadb,php-fpm,ppp,wpa_supplicant,yum} [email protected]:/etc

문자 그대로의 의미가 있습니다 .. 이름의 일부이므로 문제가 되지 않습니다. {}부분 의버팀대 확장: 쉼표로 구분된 각 부분을 확장하여 해당 매개변수 앞 부분( /etc/logrotate.d/)으로 연결합니다. (또한 무엇이든 얻으면 무엇이든 얻습니다: a{BC}dExpands aBd aCd).

따라서 이 명령은 다음과 같습니다.

rsync --delete --recursive /etc/logrotate.d/httpd /etc/logrotate.d/mariadb /etc/logrotate.d/php-fpm /etc/logrotate.d/ppp /etc/logrotate.d/wpa_supplicant /etc/logrotate.d/yum [email protected]:/etc

또는 디렉터리를 선택하여 짧게 만듭니다.

rsync --delete --recursive /etc/logrotate.d/httpd [email protected]:/etc

rsync는 "from" 위치를 단일 엔터티로 해석합니다.아니요a로 끝나면 /지정된 대상 경로에서 해당 이름의 마지막 부분만 포함하는 새 파일이나 디렉터리가 생성됩니다. 즉, httpd대상 /etc/httpd에 a가 생성되고 해당 내용이 복사됩니다 /etc/logrotate.d/httpd.

있다면 --delete그럴 것이다.모든 콘텐츠 삭제저것아니요/etc/logrotate.d/httpd소스 에 . 문제 - /etc/logrotate.d/httpd소스에 존재하지 않는 파일을 복사하고 삭제한다는 것은 의미합니다.이 모든 디렉토리의 모든 내용을 삭제하십시오.. 존재하는 경우 해당 내용은 와 다르므로 /etc/httpd(거의) 모든 내용이 삭제됩니다.

따라서 문제는 logrotate.d실제로 동일한 디렉토리를 에 복사하려는 경우 /etc다음을 의미할 수 있다는 것입니다.

rsync --progress --delete -avhHe ssh /etc/{httpd,mariadb,php-fpm,ppp,wpa_supplicant,yum} [email protected]:/etc

/etc/httpd내용을 대상에 복사하는 /etc/httpd등의 작업을 수행합니다. 내부 내용을 복사할 계획이라면 logrotate.d양쪽 경로에 넣어주세요.

유용하다고 생각되는 것 중 하나는-n또는 --dry-run옵션도착하다 rsync:

-n, --dry-run 변경 없이 테스트 실행을 수행합니다.

이렇게 하면 앞으로 일어날 일에 대한 미리보기가 표시되지만 실제로 어느 쪽에서도 변경 사항이 적용되지는 않습니다. 이를 사용하여 실제 실행 전에 원하는 것이 맞는지 확인할 수 있습니다.


제공한 인수에서 쉘 확장을 방지하는 방법을 묻습니다 rsync. 위에서 언급했듯이, 당신이 겪고 있는 문제를 고려할 때 이것이 실제로 당신이 원하는 것이라고 생각하지 않지만, 꼭 필요한 경우 중괄호 확장은 따옴표 안에서 발생하지 않으므로 문자 그대로 "a{BC}d"유지하십시오 .a{BC}d

관련 정보