Soluzione 1:
tar (e cpio e afio e pax e programmi simili) sono formati orientati allo stream - sono pensati per essere trasmessi direttamente su un nastro o convogliati in un altro processo. mentre, in teoria, sarebbe possibile aggiungere un indice alla fine del file/stream, non conosco nessuna versione che lo faccia (sarebbe comunque un miglioramento utile)
non aiuterà con i tuoi archivi tar o cpio esistenti, ma c'è un altro strumento, dar ("archivio disco"), che crea file di archivio che contengono un tale indice e può darti un rapido accesso diretto ai singoli file all'interno dell'archivio .
se dar non è incluso nel tuo unix/linux-dist, puoi trovarlo in:
http://dar.linux.free.fr/
Soluzione 2:
Potresti usare SquashFS per tali archivi. Lo è
- progettato per essere accessibile utilizzando un fuse driver (sebbene esista un'interfaccia tradizionale)
- compresso (maggiore è la dimensione del blocco, maggiore è l'efficienza)
- incluso nel kernel Linux
- memorizza UID/GID e ora di creazione
- consapevolezza dell'endianess, quindi abbastanza portabile
L'unico inconveniente che conosco è che è di sola lettura.
http://squashfs.sourceforge.net/http://www.tldp.org/HOWTO/SquashFS-HOWTO/whatis.html
Soluzione 3:
Sebbene non memorizzi un indice, star
si presume sia più veloce di tar
. Inoltre supporta nomi file più lunghi e ha un supporto migliore per gli attributi dei file.
Come sicuramente saprai, la decompressione del file richiede tempo e probabilmente inciderebbe sulla velocità di estrazione anche se fosse presente un indice.
Modifica: Potresti anche dare un'occhiata a xar
. Ha un'intestazione XML che contiene informazioni sui file nell'archivio.
Dalla pagina di riferimento:
L'intestazione XML di Xar gli consente di contenere metadati arbitrari sui file contenuti nell'archivio. Oltre ai metadati del file unix standard come la dimensione del file e i suoi tempi di modifica e creazione, xar può memorizzare informazioni come bit di file ext2fs e hfs, flag unix, riferimenti ad attributi estesi, informazioni su Mac OS X Finder, Mac OS X resource fork e hash dei dati del file.
Soluzione 4:
Thorbjørn Ravn Anderser ha ragione. GNU tar crea archivi "ricercabili" per impostazione predefinita. Ma non usa queste informazioni quando legge questi archivi se l'opzione -n non è data. Con l'opzione -n ho appena estratto il file da 7 GB dall'archivio da 300 GB nel tempo necessario per leggere/scrivere 7 GB. Senza -n ci sono voluti più di un'ora e non ha prodotto alcun risultato.
Non sono sicuro di come la compressione influisca su questo. Il mio archivio non è stato compresso. Gli archivi compressi non sono "ricercabili" perché l'attuale tar GNU (1.26) scarica la compressione su un programma esterno.
Soluzione 5:
L'unico formato di archivio che conosco che memorizza un indice è ZIP, perché ho dovuto ricostruire indici danneggiati più di una volta.