rsync -r 명령을 사용하여 도트 파일(.x)을 포함합니다.

rsync -r 명령을 사용하여 도트 파일(.x)을 포함합니다.

다음 명령이 있습니다.

rsync -r --exclude="node_modules" "/r2g_shared_dir/vamoot"/* "/home/node/.docker_r2g_cache/b640e7fd-27a7-4dd8-8ca8-5363a1c59c35"

방금 /*를 사용하면 도트 파일(.로 시작하는 파일/폴더)이 복사되지 않는다는 것을 깨달았습니다...

이 파일을 어떻게 포함할 수 있는지 아시는 분 계신가요?

내 생각에 가장 좋은 접근 방식은 /* 표기법을 버리고 그냥 사용하는 것입니다.

rsync -r --exclude="node_modules" "/r2g_shared_dir/vamoot" "/home/node/.docker_r2g_cache/b640e7fd-27a7-4dd8-8ca8-5363a1c59c35"

그런데 다른 방법이 있나요?

답변1

패턴 일치를 rsync에 남겨두는 것이 좋습니다. 그러면 해당 시점에 쉘에 있는 쉘과 옵션에 의존하지 않게 됩니다.

이 작업을 수행할 때:

rsync -a /some/dir/* host:/remote/dir/

/some/dir/*그런 다음 실제로 rsync가 실제로 다음과 같이 실행되도록 해당 부분을 확장하도록 셸에 요청합니다 .

rsync -a /some/dir/adir /some/dir/afile /some/dir/anotherfile [etc] host:/remote/dir/

이는 종종 의도와 매우 유사하지만, 질문이 제시된 사실이 항상 그런 것은 아닙니다. 따라서 다음을 실행하는 것이 좋습니다.

rsync -a /some/dir/ host:/remote/dir/

이제 rsync는 (recursive의 약어이므로 -a) 디렉터리를 재귀적으로 탐색하고 .-rlptgoD-r/some/dir/remote/dir/some/dir

소스 경로가 슬래시로 끝나기 때문에 /전송된 파일 이름에서는 소스 위치의 모든 부분이 무시됩니다. /some/dir통과 하면 dir디렉터리가 명시적으로 동기화되도록 지시하는 것입니다.포함하다그것의 이름. 무슨 일이 일어나고 있는지 정말로 이해하지 않는 한 이러한 혼란을 피하기 위해 항상 마지막 슬래시를 추가하는 습관을 들이는 것이 좋습니다.

답변2

내 생각에 가장 좋은 방법은 아카이브 모드(-a)를 사용하는 것입니다. 매뉴얼 페이지에는 "이것은 -rlptgoD와 동일합니다. 이는 재귀적이고 거의 모든 것을 유지하고 싶다고 말하는 빠른 방법입니다(- H 중요한 누락이 있습니다):

rsync -a /source/path/ /destination/path/
  • 항상 후행 슬래시 /를 사용하십시오.
  • *는 도트 파일을 포함하지 않으므로 사용하지 마세요.
  • 디스크 읽기/쓰기보다 느린 네트워크를 통해 전송하는 경우 압축 -z를 고려하세요.

답변3

이것이 bash라면 다음을 설정할 수 있습니다 dotglob.

shopt -s dotglob

.이는 일치하거나 일치하지 않습니다 ..( 의 반대 .*).

따라서 동일한 명령을 사용할 수 있습니다.

rsync -r --exclude="node_modules" "/r2g_shared_dir/vamoot"/* ...

관련 정보