--exclude
rsync에 제가 자주 사용하는 옵션이 있다는 것을 알고 있습니다 . 그러나 모든 "숫자" 디렉터리를 제외하도록 지정하려면 어떻게 해야 합니까?
아래 나열된 디렉토리에서 복사 하고 싶습니다 css
.html
include
.
..
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/