2013-09-07 12 views
5

Ho diverse centinaia di migliaia di file in sottodirectory diverse che risiedono tutte in una directory principale, ad es.Come utilizzare tar per archiviare file da directory diverse senza struttura di directory

/home/dir1/file1 
/home/dir2/file2 
/home/dir3/file3 
... 
/home/dir10000/file10000 

Come posso usare tar in modo che il mio archivio tar assomigli a questo?

file1 
file2 
file3 

Posso garantire che i nomi dei file siano univoci. Non voglio includere la struttura della directory originale.

Grazie per il vostro aiuto!

risposta

-1

Aprire la riga di comando e digitare

tar -cvf NAME.tar /home/dir1/file1 /home/dir1/file2 /home/dir1/file3 

Spero che questo aiuti :)

+0

Ho diversi file 100-10000 in cui non conosco il nome. Qualche altra idea in cui posso semplicemente usare la directory/home? – user1876422

+0

Questo non risponde all'opzione OP di evitare la struttura di directory nel tarball –

+0

Fondamentalmente questo creerà ancora la struttura di cartelle nel tar/tgz – ghitesh

2

Una possibile soluzione potrebbe essere quella di utilizzare il normale tar di comando (sputare sul suo stdout) e poi per il tubo del archivio in tardy, probabilmente con l'opzione -No_Directories, cioè

tar cf - /home/dir?/ | tardy -No-Directories > yourbig.tar 

Tuttavia, non sono sicuro che sia una buona idea. Avere una tar ball che si sta estraendo in centinaia di migliaia di file nella stessa directory non è una buona idea (alcuni filesystem si comportano male con questo).

3

GNU tar accetta un'opzione di trasformazione, che è solo un'espressione sed che trasforma il nome del file nell'archivio. Probabilmente vorrai anche pipe to xargs se il tuo elenco di file è molto grande.

cat filelist | xargs tar -rvf archive.tar --transform='s|.*/||g' 

Tenete a mente che questo è aggiungendo ad un archivio tar (creerà uno se non esiste ancora) in modo che si vorrà cancellare l'archivio se esiste già prima di eseguire quel comando.

3

L'unico modo per risolvere questo senza cat ing o | ing ad altri programmi:

tar --transform 's,.*/,,g' -cvf mytarfile.tar /path/to/parent_dir 

# --transform accepts a regular expression similar to sed. 
# I used "," as a delimiter so I don't have to escape "/" 
# This will replace anything up to the final "/" with "" 
# /path/to/parent_dir/sub1/sub2/subsubsub/file.txt -> file.txt 
# /path/to/parent_dir/file2.txt -> file2.txt 

differenza implica Aaron Okano, non v'è alcuna necessità di tubo per xargs se si dispone di una lunga lista di file all'interno una singola/poche directory madri che è possibile specificare sulla riga di comando.

Problemi correlati