rsync exclui uma pasta contendo um subdiretório .git (--filter)

2

Eu quero fazer backup de várias pastas. Neste várias pastas eu quero excluir todos os diretórios, que contêm um subdiretório .git . Por exemplo, nesta hierarquia de pastas:

├── gitrepo        <-- exclude this completely
|   └── .git/...
│   └── file1
└── nogitrepo      <-- keep this
    └── file2

Já excluí todos os diretórios .git com --exclude=.git , mas como todo o conteúdo dos repositórios locais já está no SCM remoto, não quero incluí-los em meu backup.

Estou ciente do argumento --filter do rsync. Eu olhei para a página man, mas não tenho certeza se isso resolveria esse problema. Mas estou otimista, pois o rsync monta uma lista de arquivos com todos os arquivos.

Então, é possível com o rsync excluir todas as pastas que são repositórios git? Algo parecido com a regra por diretório para --filter ?

    
por 0x00F 07.03.2018 / 13:36

2 respostas

0

Configure as variáveis SRC e DEST , por exemplo:

SRC="./"
DEST="../BACKUP/"

Você pode usar algo como find para localizar todos os diretórios .git :

find "${SRC}" -type d -name '.git'

Isso incluirá ${SRC}/.git também (o que se tornará ${SRC} e, portanto, ignorará " tudo ") ... para evitar esse uso -mindepth 2 :

find "${SRC}" -mindepth 2 -type d -name '.git'

Em seguida, retire os componentes /.git finais:

find "${SRC}" -mindepth 2 -type d -name '.git' \
    | sed -re 's!/.git$!!g'

Como rsync definirá seu diretório de trabalho para a origem, também precisamos cortar o ${SRC} inicial dos resultados:

find "${SRC}" -mindepth 2 -type d -name '.git' \
    | sed -re 's!^'"${SRC}"'!!g;s!/.git$!!g'

Por fim, junte-se a isso com o comando rsync , usando --exclude-from , passando - (ou seja, stdin ):

find "${SRC}" -mindepth 2 -type d -name '.git' \
    | sed -re 's!^'"${SRC}"'!!g;s!/.git$!!g' \
    | rsync -av --exclude-from - "${SRC}" "${DEST}"/

OBSERVAÇÃO: isso não selecionará nenhum arquivo não rastreado / modificado.

    
por 11.09.2018 / 17:59
0

find your_DIR_for_BACKUP -name .git | sed 's/\/.git//g' > ~/exclude_repos

e execute o rsync com a opção --exclude-from, escolha o arquivo preenchido ~ / exclude_repos

rsync --exclude-from ~/exclude_repos your_DIR_for_BACKUP_SRC DST

    
por 11.09.2018 / 17:39