Rsync include un'elegante opzione --cvs-excludeper "ignorare i file nello stesso modo in cui lo fa CVS", ma CVS è obsoleto da anni. C'è un modo per escludere anche file che sarebbero ignorati dai moderni sistemi di controllo delle versioni (Git, Mercurial, Subversion)?
Ad esempio, ho molti progetti Maven controllati da GitHub. In genere includono .gitignorealmeno un elenco target, la directory di compilazione Maven predefinita (che può essere presente al livello superiore o nei sottomoduli). Poiché il contenuto di queste directory è interamente usa e getta e può essere molto più grande del codice sorgente, vorrei escluderle quando si utilizza rsync per i backup.
Ovviamente posso --exclude=target/farlo in modo esplicito, ma questo sopprimerà accidentalmente le directory non correlate che per caso hanno un nome targete non dovrebbero essere ignorate.
E potrei fornire un elenco completo di percorsi assoluti per tutti i nomi di file e modelli menzionati in qualsiasi .gitignore, .hgignoreo svn:ignoreproprietà sul mio disco, ma questo sarebbe un elenco enorme che dovrebbe essere prodotto da una sorta di script.
Dato che rsync non ha alcun supporto integrato per i checkout VCS oltre a CVS, c'è qualche buon trucco per alimentare i propri schemi di ignoranza? O qualche tipo di sistema di callback in base al quale è possibile chiedere a uno script utente se un determinato file / directory debba essere incluso o meno?
Aggiornamento : --filter=':- .gitignore'come suggerito da LordJavac sembra funzionare anche per Git come --filter=:Cfa per CVS, almeno sugli esempi che ho trovato, anche se non è chiaro se la sintassi sia una corrispondenza esatta. --filter=':- .hgignore'non funziona molto bene per Mercurial; ad esempio un .hgignorecontenente una riga come ^target$(l'equivalente Mercurial di Git /target/) non è riconosciuto da rsync come espressione regolare. E niente sembra funzionare per Subversion, per il quale dovresti analizzare .svn/dir-prop-baseper una copia di lavoro 1.6 o precedente, e alzare le mani in sgomento per una copia di lavoro 1.7 o successiva.
:-significa esattamente? Cosa significa il colon? Che cos'è il trattino?
check-ignoresottocomando che può gestire il duro lavoro di analizzare i vari file "ignorati", se si desidera utilizzare l'opzione "genera un elenco di tutti i file non ignorati". La mia risposta qui fornisce dettagli su come farlo.