2011-01-01 3 views
14

tar su una directory mydir sarà archiviare i file nascosti e le sottodirectory nascosti, ma catrame da entromydir con un * jolly non lo faranno. Si tratta di una incoerenza o di un bug di lunga data e nota?archiviazione (catrame ubuntu) directory nascoste

Edit (ulteriori informazioni): tar dall'interno mydir con un carattere jolly non "vedere" né archiviare i file nascosti e le sottodirectory nascosti nelle immediate directory . Tuttavia, nelle sottodirectory non nascoste di mydir i file nascosti e le sottodirectory nascoste verranno archiviati.

risposta

4

La risposta è che il * jolly viene gestito dalla shell e semplicemente non si espande a cose che iniziano con un punto. Anche l'altro carattere jolly ? non si espande in oggetti che iniziano con un punto. Grazie a Keith per aver sottolineato che è la shell che fa l'espansione e quindi non ha nulla a che fare con tar.

Se si utilizza shopt -s dotglob, l'espansione includerà elementi come .filename. Grazie ad Andy.

Utilizzare shopt -u dotglob per disattivarlo.

L'opzione di commutazione dotglob non cambia ls. Piuttosto cambia solo il comportamento di espansione come mostrato in qualcosa come ls *.

+0

È interessante ma potresti mostrarlo in un comando di esempio? – felwithe

24

Con jolly non funzionerà. Devi specificare. (directory corrente) se si intende la directory completa compresi i file nascosti. Si può fare

tar -cvpzf test.tgz . 
+6

Ma attenzione a posizionare il nuovo tar all'interno della stessa directory che si sta tarando. Puoi entrare in un brutto ciclo. – Keith

+7

tar cvpfz test.tgz --exclude = *. Tgz. – H2ONaCl

+0

Sì, funzionerebbe –

3

La shell espande i caratteri jolly in modo che tar non la veda nemmeno. Devi aggiungerli esplicitamente se vuoi farlo. (.*). Tuttavia, è più comune tar una singola directory in modo tale che quando si decompone tutto va nello stesso posto.

+0

+1 per indicare che questo è dovuto alla shell, non a tar. –

+0

In realtà tar su. * Salirà (probabilmente all'altezza della radice), quindi probabilmente non si vuole farlo. Correzione – H2ONaCl

+0

: non all'altezza della radice. – H2ONaCl

1
shopt -s dotglob 

questo renderà la

+6

Benvenuti in StackOverflow! Hai dimenticato di finire il tuo messaggio? –

+0

Keith spiega questa risposta in uno dei suoi commenti. – H2ONaCl

5

È possibile utilizzare:

tar -cvpzf test.tgz * .??* 

Ma, questo funziona solo per i file nascosti con i nomi> 2 ('' prevenire e '..')

1

È possibile comprimere tutti i file/cartelle nella directory corrente (compreso .hidden) utilizzando:

tar -zcvf compressed.tgz `ls -A -1` 

L'ultimo argomento sono le cartelle che si desidera comprimere. Se lo passi ls -A -1, stai passando tutte le cartelle nella directory corrente ma . e ... Quando si tratta di sottodirectory, i file .hidden sono già inclusi nella compressione per impostazione predefinita.