rsync를 사용하여 디지털 디렉터리를 제외하는 방법은 무엇입니까?

rsync를 사용하여 디지털 디렉터리를 제외하는 방법은 무엇입니까?

--excludersync에 제가 자주 사용하는 옵션이 있다는 것을 알고 있습니다 . 그러나 모든 "숫자" 디렉터리를 제외하도록 지정하려면 어떻게 해야 합니까?

아래 나열된 디렉토리에서 복사 하고 싶습니다 css.htmlinclude

.
..
123414
42344523
345343
2323
css
html
include

보통 내 구문은 다음과 같습니다

rsync -avz /local/path/ user@server:/remote/path/ --exclude="cache"

나는 이것이 이렇게 보여야 한다고 생각 --exclude="[0-9]*"하지만 이것이 작동하지 않을 것이라고 생각합니다.

답변1

rsync의 패턴 구문에서는 "숫자만 포함하는 이름"이라고 말할 수 없습니다. 따라서 숫자가 아닌 이름을 포함하는 모든 이름을 포함하고 나머지는 제외하십시오.

rsync --include='*[!0-9]*' --exclude='*/' …

내 것도 참조하세요rsync 모드 가이드.

답변2

rsync의 제외 옵션은 실제로 정규식을 지원하지 않으며 쉘 와일드카드 패턴 일치에 가깝습니다.

이러한 디렉토리가 상당히 정적인 경우 파일에 나열하고 --exclude-from=/full/path/to/file/exclude_directories.txt.

예제를 제공하도록 업데이트되었습니다.

먼저 디렉터리를 파일에 넣습니다.

find . -type d -regex '.*/[0-9]*$' -print > /tmp/rsync-dir-exlcusions.txt

또는

( cat <<EOT
123414
42344523
345343
2323
EOT ) > /tmp/rsync-directory-exclusions.txt

그런 다음 rsync 작업을 수행할 수 있습니다.

rsync -avHp --exclude-from=/tmp/rsync-directory-exclusions.txt /path/to/source/ /path/to/dest/

제외할 디렉터리가 한 줄에 하나씩 포함된 텍스트 파일을 설정하는 추가 단계만 필요합니다.

작업의 디렉터리 경로는 rsync가 디렉터리를 보는 방식에 따라 결정됩니다.

답변3

한 줄로 할 수 있습니다:

rsync -avHp --exclude-from=<(cd /path/to/source; find . -type d -regex './[0-9]*' | sed -e 's|./||') /path/to/source/ /path/to/dest/

답변4

다음 명령을 사용하십시오.

$> rsync -avlH --exclude=*.ibd --exclude-from=<(ls -p | grep -v / | \
   grep -E 'ibdata|ib_logfile')  /mnt/myfuse/ /u01/my3309/data/

관련 정보