Você pode tentar --exclude="<filePattern>"
rsync -av --exclude="._*" --exclude=".DS_Store" <source> <destination>
Como posso usar rsync -av
, mas excluir todos os arquivos que começam com underscore de ponto ( ._example.txt
) e também ignorar .DS_Store
arquivos?
Usar --exclude='._*'
faria com que rsync
ignorasse todos os arquivos e diretórios com ponto-sublinhado no início de seus nomes. Com --exclude='.DS_Store'
, você ignoraria o outro tipo de arquivo.
Se você deseja excluir arquivos e diretórios que correspondem a ._*
e .DS_Store
, as respostas anteriores são suficientes:
rsync -av --exclude='._*' --exclude='.DS_Store' src dst
Por outro lado, para responder à sua pergunta exatamente como solicitado, esse snippet excluirá os arquivos que correspondem aos seus critérios e ainda incluirá os diretórios correspondentes a _*
e .DS_Store
:
rsync -av --include '.DS_Store/' --include '._*/' --exclude '.DS_Store' --exclude '._*' src dst
Exemplo trabalhado
# Set up the example directory tree
mkdir -p src/a/.DS_Store src/a/._example.dir dst
touch src/.DS_Store src/._example.txt src/a/.DS_Store/keep src/a/._example.dir/keep src/item src/a/another
# Show what we have
find src -type f
src/.DS_Store
src/._example.txt
src/a/.DS_Store/keep
src/a/._example.dir/keep
src/a/another
src/item
# Copy it. Omit matching files but keep the directories
rsync -av --include '.DS_Store/' --include '._*/' --exclude '.DS_Store' --exclude '._*' src/ dst
sending incremental file list
./
item
a/
a/another
a/.DS_Store/
a/.DS_Store/keep
a/._example.dir/
a/._example.dir/keep
# Tidy up
rm -rf src dst
Tags rsync regular-expression