Jak przechowywać duży folder w jednym pliku bez kompresji

11

Chcę wziąć folder 78 GB i zapisać go w jednym pliku (do przesłania do usługi w chmurze), tak jakbym kompresował go w archiwum, ale nie chcę żadnej kompresji (nie mam tak dużo procesora dostępny czas). Czy w ogóle mogę to osiągnąć, być może terminalne polecenie, o którym nie wiem?

cjmaria
źródło
1
tarw Linuksie jest polecenie. tar -cf long.file.tar folder
Costas
5
FYI: Istnieją programy do szybkiej kompresji, niektóre z nich będą szybsze niż prędkość zapisu na dysku i wiele, które będą szybsze niż sieć. Użycie jednego z nich przyspieszy proces, jeśli dane będą w ogóle kompresowalne. Np. lzopJest przeznaczony do prędkości.
derobert

Odpowiedzi:

20

Użyj tar: tar -cf my_big_folder.tar /my/big/folder

Przywróć archiwum za pomocą tar -xf my_big_folder.tar -C /

-C przejdzie do katalogu głównego, aby przywrócić archiwum, ponieważ utworzone powyżej archiwum zawiera ścieżki bezwzględne.

EDYCJA : Ze względu na stosunkowo duży rozmiar archiwum najlepiej byłoby wysłać go [bezpośrednio] do jego ostatecznej lokalizacji, używając SSH lub punktu montowania zasobu / folderu w chmurze. Na przykład, jak sugeruje Cole Johnson :

tar -cf /network/mount/point/my_big_folder.tar /my/big/folder

lub

tar -c /my/big/folder | ssh example.com "cat > my_big_folder.tar"

EDYCJA : Jak sugeruje również Blacklight Shining , jeśli chcesz unikać ścieżek bezwzględnych, możesz przejść do rodzica dużego folderu, a tarstamtąd:

tar -cf /network/mount/point/my_big_folder.tar \
    -C /my/big/folder/location the_big_folder

lub

tar -cC /my/big/folder/location the_big_folder | \
ssh example.com "cat > my_big_folder.tar"

Refleksje osobiste

To, czy uwzględnić ścieżki względne czy bezwzględne, jest kwestią osobistych preferencji.

Zdarzają się przypadki, że ścieżki bezwzględne są oczywiste, np. W przypadku przywracania w przypadku odzyskiwania po awarii. W przypadku lokalnych projektów lub kolekcji archiwizowanie drzewa katalogów od rodzica wybranego folderu jest powszechne, aby uniknąć zaśmiecania bieżącego katalogu, na wypadek, gdyby archiwum zostało przypadkowo rozpakowane na miejscu. Jeśli big_folder leży gdzieś głęboko w standardowej hierarchii * NIX , sensowne może być rozpoczęcie archiwizowania pierwszego niestandardowego folderu, z którego odchodzi big_folder, i stamtąd jego drzewo katalogów.

Wreszcie - przechodząc tutaj pedantycznie - tarczłonkowie archiwum są zawsze względni, ponieważ a) można je przywrócić w dowolnym katalogu ib) tar usuwa wiodące /podczas tworzenia archiwum. Osobiście zwykle używam -C podczas rozpakowywania archiwum.

Społeczność
źródło
Aby wyjaśnić zmianę: zrób tar -cf /network/mount/point/folder.tar /folderzamiast tarowania na komputer lokalny, a następnie prześlij, jeśli możesz
Cole Johnson
Dokładny. Im więcej czytam swoją edycję, tym bardziej wydaje mi się, że wygląda na zmieszaną. Dzięki za wgląd.
1
Warto zwrócić uwagę na sposób, aby uniknąć tworzenia archiwum ze ścieżek absolutnych tar -cf $archive.tar -C $source_dir .. Jeśli komputer docelowy nie ma katalogu o tej samej ścieżce co katalog źródłowy, musisz to zrobić. Po prostu -Cwyodrębnij ( mkdir $destination_dir && tar -xf $archive.tar -C $destination_dir) katalog do nowego katalogu ; w przeciwnym razie zawartość archiwum zostanie zrzucona do dowolnego katalogu, w którym się znajdujesz.
Blacklight Shining
2

Alternatywnie: cpio

(cd /my/big/folder && find . -depth -print0 | cpio -0o > myfolder.cpio)

Rozpakowywanie do bieżącego katalogu:

cpio -id < myfolder.cpio

Ostrzeżenia:

  • Jeśli użyjesz find /my/big/folderzamiast cd, archiwum będzie zawierać pełne ścieżki, a ekstrakcja spróbuje je podążać;
  • Problem mogą stanowić duże pliki (> 2 GB);
Vi.
źródło
Jednak Cpio jest znacznie wolniejszy niż tar, jeśli jest używany z domyślnym rozmiarem bloku 512. ( fixunix.com/sco/89900-cpio-performance-vs-tar-bit-mystery.html )
PSkocik