Quero fazer backup de várias pastas. Nestas múltiplas pastas, quero excluir todos os diretórios que contêm um .git
subdiretório. Por exemplo, nesta hierarquia de pastas:
├── gitrepo <-- exclude this completely
| └── .git/...
│ └── file1
└── nogitrepo <-- keep this
└── file2
Já excluí com sucesso 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 --filter
argumento do rsync. Examinei a página de manual, mas não tenho certeza se isso resolverá esse problema. Mas estou otimista, já que o rsync monta previamente uma lista de arquivos com todos os arquivos incluídos.
Então, é possível com o rsync excluir todas as pastas que são repositórios git? Algo como a regra por diretório para --filter
?
Responder1
Configure suas variáveis SRC
e DEST
, por exemplo:
SRC="./"
DEST="../BACKUP/"
Você pode usar algo como find
localizar todos .git
os diretórios:
find "${SRC}" -type d -name '.git'
Isso incluirá ${SRC}/.git
também (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 /.git
componentes finais:
find "${SRC}" -mindepth 2 -type d -name '.git' \
| sed -re 's!/.git$!!g'
Como rsync
definiremos seu diretório de trabalho como a fonte, precisamos cortar o inicial ${SRC}
dos resultados também:
find "${SRC}" -mindepth 2 -type d -name '.git' \
| sed -re 's!^'"${SRC}"'!!g;s!/.git$!!g'
Por fim, junte isso com o rsync
comando, 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 vai pegarqualquerarquivos não rastreados/modificados.
Responder2
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