Risposte:
Normalmente useresti il flag -u per questo. Dalla pagina man di tar:
-u, --update only append files newer than copy in archive
quindi questa sequenza farà ciò di cui hai bisogno:
# First create the tar file. It has to be UNCOMPRESSED for -u to work
tar -cvf my.tar some-directory/
# ... update some files in some-directory
# ... add files in some-directory
# Now update only the changed and added files
tar -uvf my.tar some-directory/
# Compress if desired
gzip my.tar
Per un aspetto leggermente più dettagliato, consultare qui: http://www.gnu.org/software/tar/manual/html_node/how-to-update.html
Non è possibile aggiornare l'archivio TAR compresso ( .tar.gz ) in un solo passaggio. Ma se hai abbastanza spazio libero puoi farlo:
Estrarre il file .tar dal file .tar.gz :
gunzip filename.tar.gz
Aggiorna il file .tar non compresso con il tar -u
comando:
tar -uf filename.tar new_file
Comprimi il file .tar aggiornato :
gzip filename.tar
Se si dispone di CPU multi-core, si consiglia di utilizzare pigz
anziché gzip
estrarre e creare file .gz . ( pigz
è un'implementazione multi-thread di gzip
)
Sostituisci semplicemente gzip
/ gunzip
comandi in pigz
/ unpigz
.
Se desideri aggiornare un determinato file nel *.tar.gz
file, procedi come segue:
Immettere vi
da dove tar
è disponibile il file
/home>vi
Ad esempio, se si desidera modificare simple.tar.gz che si trova nella /home/test/
directory:
/home/test>vi
E nell'editor vuoto, immettere :n simple.tar.gz
e premere Enter
per visualizzare l'elenco di cartelle e file, spostare il cursore nel punto in cui si desidera modificare e fare clic Enter. Verrà mostrato l' vi
editor del file specifico. Quindi i
opzione per modificare il file. Dopo il cambiamento riuscito. Premere il Esctasto e scegliere :wq
di scrivere ed uscire dal file. Quindi utilizzare :q
per uscire dall'elenco dei file.
Se lo farai ripetutamente, un'ottimizzazione può essere:
if [[ -f my.tar.gz ]]; then
if [[ ! -f my.tar ]]; then
echo 'No tar, unzipping tar.gz'
gunzip my.tar.gz
fi
tar -uvf my.tar file1 file2 file_new
gzip -fk my.tar # This keeps a copy of the tar.
# -f --force overwrite existing .tar.gz
# -k --keep Keep the input file (.tar file)
else
tar -cvzf my.tar.gz file1 file2
fi