GNU/Linux >> Linux Esercitazione >  >> Linux

Creare un archivio Tar di una directory, ad eccezione dei file nascosti?

Voglio creare un archivio tar di una directory specifica (con le sue sottodirectory ovviamente). Ma quando lo faccio, usando il comando tar, ottengo un elenco di file che sono stati inclusi, ad esempio:

un calendario_finale/._style.css

a calendar_final/style.css

Come puoi vedere, ci sono due versioni dello stesso file. Questo vale per ogni file e ce ne sono molti. Come faccio a escludere i file temporanei, con il prefisso ._, dall'archivio tar?

Risposta accettata:

Hai pubblicato in un commento che stai lavorando su un sistema Mac OS X. Questo è un indizio importante sullo scopo di questi ._* file.

Questi ._* le voci di archivio sono blocchi di dati AppleDouble che contengono le informazioni extra associate al file corrispondente (quello senza ._ prefisso). Sono generati dal copyfile(3) specifico di Mac OS X famiglia di funzioni. I BLOB AppleDouble archiviano i dati di controllo dell'accesso (ACL) e gli attributi estesi (di solito, Finder flag e "fork di risorse", ma xattrs può essere utilizzato per memorizzare qualsiasi tipo di dato).

Gli strumenti di archiviazione di Mac OS X forniti dal sistema (bsdtar (collegato anche come tar ), gnutar e pax ) genererà un ._* membro dell'archivio per qualsiasi file a cui sono associate informazioni estese; in modalità "unarchive", decodificheranno anche quei membri dell'archivio e applicheranno le informazioni estese risultanti al file associato. Questo crea un archivio di "fedeltà completa" da utilizzare sui sistemi Mac OS X, preservando ed estraendo in seguito tutte le informazioni che il filesystem HFS+ può memorizzare.

Gli strumenti di archiviazione corrispondenti su altri sistemi non sanno dare un trattamento speciale a questi ._* file, quindi vengono decompressi come file normali. Poiché tali file sono abbastanza inutili su altri sistemi, sono spesso visti come "file spazzatura". Di conseguenza, se un sistema non Mac OS X genera un archivio che include file normali che iniziano con ._ , gli strumenti di annullamento dell'archiviazione di Mac OS X cercheranno di decodificare quei file come informazioni estese.

Esiste, tuttavia, un modo non documentato (?) per far sì che gli archivi Mac OS X forniti dal sistema si comportino come su altri sistemi Unixy:la variabile d'ambiente COPYFILE_DISABLE. L'impostazione di questa variabile (su qualsiasi valore, anche la stringa vuota), impedirà agli archiviatori di generare ._* membri dell'archivio per rappresentare qualsiasi informazione estesa associata ai file archiviati. La sua presenza impedirà inoltre agli archivisti di cercare di interpretare tali membri dell'archivio come informazioni estese.

COPYFILE_DISABLE=1 tar czf new.tar.gz …
COPYFILE_DISABLE=1 tar xzf unixy.tar.gz …

Potresti impostare questa variabile nel file di inizializzazione della tua shell se vuoi lavorare in questo modo il più delle volte.

# disable special creation/extraction of ._* files by tar, etc. on Mac OS X
COPYFILE_DISABLE=1; export COPYFILE_DISABLE

Quindi, quando è necessario riattivare la funzione (per preservare/ripristinare le informazioni estese), è possibile "disimpostare" la variabile per i singoli comandi:

(unset COPYFILE_DISABLE; tar czf new-osx.tar.gz …)

Anche gli archivi su Mac OS X 10.4 fanno qualcosa di simile, sebbene utilizzino una variabile di ambiente diversa:COPY_EXTENDED_ATTRIBUTES_DISABLE

Correlati:reindirizzare STDERR e STDOUT a variabili diverse senza file temporanei?
Linux
  1. Creare un archivio di catrame diviso in blocchi di dimensioni massime?

  2. Creare una directory di destinazione durante l'estrazione di Tarball?

  3. Come creare un archivio zip compatibile con Linux di una directory su un Mac

  4. Concatena più file tar in un unico comando

  5. Come tarare i file con un ordine ordinato?

Comando Tar in Linux (crea ed estrai archivi)

Crea directory home per utenti esistenti in Linux

Comando tar di Linux – Come comprimere file in Linux

Come eseguire il tar di tipi di file specifici (estensioni) in una directory

Estrai file specifici in un archivio tar utilizzando un carattere jolly

Come escludere i file dall'archivio TAR usando le espressioni regolari?