È possibile utilizzare questo comando per eseguire il backup di tutti i dotfile ( .<something>) nella $HOMEdirectory:
$ cd ~
$ find . -maxdepth 1 -type f -name ".*" -exec tar zcvf dotfiles.tar.gz {} +
regex usando solo tar?
metodo n. 1
Ho studiato un po 'questo e sono risultato vuoto. Il fattore limitante sarebbe che quando tarsi esegue si esclude, la barra finale ( /) che si presenta con le directory non fa parte dell'equazione quando tar sta eseguendo la sua corrispondenza del modello.
Ecco un esempio:
$ tar -v --create --file=do.tar.gz --auto-compress --no-recursion --exclude={'.','..','.*/'} .*
.qalculate/
.qt/
.qterm/
.qtoctave/
.RapidSVN
.RData
.Rhistory
Questa variante include un'esclusione di .*/e puoi vedere con l'interruttore dettagliato attivato su tar -v, che queste directory stanno attraversando quell'esclusione.
metodo n. 2
Ho pensato che forse gli interruttori --no-wildcards-match-slasho --wildcards-match-slashavrebbero rilassato l'avidità del .*/ma questo non ha avuto alcun effetto.
Eliminare la barra dall'esclusione , .*non era neanche un'opzione poiché ciò avrebbe detto tardi escludere tutti i dotfile e dotdirectories:
$ tar -v --create --file=do.tar.gz --auto-compress --no-recursion --exclude={'.','..','.*'} .*
$
metodo # 3 (Brutto!)
Quindi l'unica altra alternativa che posso concepire è quella di fornire un elenco di file tar. Qualcosa come questo:
$ tar -v --create --file=do.tar.gz --auto-compress --no-recursion --wildcards-match-slash --exclude={'.','..','.*/'} $(ls -aF | grep -E "^\..*[^/]$")
.RapidSVN
.RData
.Rhistory
Questo approccio ha problemi se il numero di file supera la quantità massima di spazio per passare argomenti a un comando sarebbe un problema evidente. L'altro è che è brutto e troppo complesso.
quindi cosa abbiamo imparato?
Non sembra esserci un modo semplice ed elegante per realizzare questo usando tarespressioni regolari. Per quanto riguarda il commento di @ Terdon, find ... | tar ...è davvero il modo più appropriato per farlo.