Как сохранить большую папку в одном файле без сжатия

11

Я хочу взять папку 78 ГБ и сохранить ее в одном файле (для загрузки в облачный сервис), как если бы я сжимал ее в архиве, но мне не нужно какое-либо сжатие (у меня не так много ЦП время доступно). Есть ли способ, которым я могу выполнить это, возможно, команда терминала, о которой я не знаю?

cjmaria
источник
1
tarВ Linux есть команда. tar -cf long.file.tar folder
Костас
5
К вашему сведению: существуют программы быстрого сжатия, некоторые из которых будут работать быстрее вашей скорости записи на диск, а многие - быстрее, чем ваша сеть. Использование одного из них на самом деле ускорит процесс, если данные вообще сжимаются. Например, lzopрассчитан на скорость.
Дероберт

Ответы:

20

Используйте tar: tar -cf my_big_folder.tar /my/big/folder

Восстановите архив с помощью tar -xf my_big_folder.tar -C /

-C перейдет в корневой каталог для восстановления вашего архива, поскольку созданный выше архив содержит абсолютные пути.

РЕДАКТИРОВАТЬ : из-за относительно большого размера архива, было бы лучше отправить его [напрямую] в его окончательное местоположение, используя SSH или точку монтирования облачного ресурса / папки. Например, как предполагает Коул Джонсон :

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

или

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

РЕДАКТИРОВАТЬ : Как предлагает Blacklight Shining , если вы хотите избежать абсолютных путей, вы можете перейти к родительскому элементу большой папки и tarоттуда:

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

или

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

Личные размышления

Включать ли относительные или абсолютные пути - дело личных предпочтений.

Есть случаи, когда абсолютные пути очевидны, например, для восстановления в ситуации аварийного восстановления. Для локальных проектов или коллекций обычно архивируют дерево каталогов от родительского объекта нужной папки, чтобы избежать загромождения текущего каталога в случае случайной распаковки архива на месте. Если big_folder находится где-то глубоко в стандартной иерархии * NIX , возможно, имеет смысл начать архивирование первой нестандартной папки, от которой отклоняется big_folder, и ее дерева каталогов оттуда.

И, наконец, - педантично - tarчлены архива всегда относительны, так как а) они могут быть восстановлены в любом каталоге и б) tar удаляют ведущие /при создании архива. Я лично всегда склонен использовать -C при распаковке архива.

Сообщество
источник
Чтобы уточнить редактирование: сделайте tar -cf /network/mount/point/folder.tar /folderвместо того, чтобы зайти на локальный компьютер, а затем загрузите, если можете
Коул Джонсон,
Exact. Чем больше я читаю свои правки, тем больше я думаю, что это выглядит запутанным. Спасибо за ваше понимание.
1
Стоит отметить способ избежать создания архива с абсолютными путями: tar -cf $archive.tar -C $source_dir .. Если конечный компьютер не имеет каталога с тем же путем, что и исходный каталог, вам нужно это сделать. Просто убедитесь, что -Cв новый каталог, когда вы извлекаете ( mkdir $destination_dir && tar -xf $archive.tar -C $destination_dir); иначе содержимое архива будет выгружено в любой каталог, в котором вы оказались.
Blacklight Shining
2

Альтернатива: cpio

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

Распаковка в текущий каталог:

cpio -id < myfolder.cpio

Предостережения:

  • Если использовать find /my/big/folderвместо cd, архив будет содержать полные пути и извлечение будет пытаться следовать им;
  • Большие файлы (> 2 ГБ) могут быть проблемой;
Vi.
источник
Cpio, как правило, работает намного медленнее, чем tar, хотя, если используется со стандартным размером блока 512. ( fixunix.com/sco/89900-cpio-performance-vs-tar-bit-mystery.html )
PSkocik,