LINUX.ORG.RU

Архивирование и разархивирование

 , , ,


0

2

Знающие люди скиньте пожалуйста пример команды которая рекурсивно делает архив-бекап папки со множеством файлов и папок внутри.

  1. рекурсивно.
  2. и это главное: чтобы сохранило все метаданные такие как дата модификации, дата создания.. Максимум что можно.
  3. и как извлечь чтобы даты остались как раньше.

На винде все просто - запуск гуи 7-зип, в настройках ставим галочки чтобы сохранило метаданные файлов и все. Можно запаковывать и распаковывать(не просто перетащить из архива, f7 или f9, двухпанельный вид, и копируешь в окне архива) и даты файлов останутся оригинальными.

Сам я не очень разбираюсь и наверное напортачу, не учту какой нибудь нюанс. А в гугл-интернете все пишут по разному..

P.S. arch, kde, btrfs

★★

Последнее исправление: Sapetuko (всего исправлений: 3)
Ответ на: комментарий от anonymous

zstd v1.0 вышел в 2016 году. Даже если где-то его не поддерживает tar, то можно распаковать в два шага (или через опцию -I, как подсказали выше). Сам zstd можно при надобности собрать из сорсов, это простой сишный код без обязательных внешних зависимостей.

Но в принципе да, всё зависит от набора систем, с корыми нужна совместимость. На винде понадобится 7-Zip >= 24.01. Если важна совместимость с очень старыми дистрибутивами или более экзотическими юниксами и не хочется компилить, то стоит рассмотреть gz, xz или даже bz2 (в зависимости от требований к степени сжатия и скорости упаковки и распаковки)

annulen ★★★★★
()
Ответ на: комментарий от Vsevolod-linuxoid

Чем zstd лучше стандартного xz?

Он (намного) быстрее сжимает и требует для этого меньше памяти. Насчёт декомпрессии не уверен, но возможно тоже чуть быстрее.

annulen ★★★★★
()
Последнее исправление: annulen (всего исправлений: 1)
Ответ на: комментарий от Vsevolod-linuxoid

Ну это уже кому как, вообще самый эффективный вариант по степени сжатия и скорости работы с архивом - это 7z + lzma2, tar.xz очень медленно работает.

P.S. У tar кстати есть --zstd, но там нельзя доп. ключи управления сжатием выставить.

Dr64h ★★★
()
Последнее исправление: Dr64h (всего исправлений: 1)
Ответ на: комментарий от Vsevolod-linuxoid

В старых версиях tar может не быть ключа --zstd, тогда просто юзаем -I 'zstd -T0 19' вместо этого. А в два шага действительно не имеет смысла — дольше.

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 1)
Ответ на: комментарий от kostik87

В определенных ситуациях для восстановления метаданных, сохраненных с помощью -p, могут потребоваться права суперпользователя, а при запуске тара от рута, -p включен по умолчанию.

aol ★★★★★
()
Последнее исправление: aol (всего исправлений: 1)
Ответ на: комментарий от Vsevolod-linuxoid

Чем zstd лучше стандартного xz?

Он по степени сжатия приближается к xz (хотя всё же чуть-чуть не дотягивает до максимальных уровней), а по скорости (и особенно скорости РАЗжатия) уделывает даже gz. То есть, лучшее из обоих миров.

CrX ★★★★★
()
Ответ на: комментарий от firkax

Кто сказал, что не нужен?

В целом работать без дефиса тоже будет, но по сути «-czpf» - это параметры запуска команды, в linux параметры указываются через двойной дефис (длинные) и через одинарный - короткие.

Логично придерживаться единого стандарта.

А так, это особенность tar.

По поводу «-p» - спасибо за уточнение, но в любом случае автор вопроса должен сам ознакомиться со справкой по tar или вообще параметрам любой команды, что ему советуют на форуме, проанализировать и сделать выводы, использовать или нет, а не бездумно копировать и выполнять.

В какой-то мере я целенаправленно привел команду в таком виде, чтобы он сам думал.

kostik87 ★★★★★
()
Ответ на: комментарий от annulen

сжатие чуть лучше но дольше и все еще хуже чем 7з(архивирую хромого, браузер). При извлечении все так же, даты создания файлов обнулились на текущее время.

Sapetuko ★★
() автор топика
Ответ на: комментарий от Sapetuko

Что такое дата создания и что ты под этим подразумеваешь? Покажи мне её в выводе.

$ ls -ls  dir2/dir1/file1 dir1/file1 
0 -rw-r--r-- 1 ivakon ivakon 0 Aug 25 21:24 dir1/file1
0 -rw-r--r-- 1 ivakon ivakon 0 Aug 25 21:24 dir2/dir1/file1

$ stat dir1/file1 dir2/dir1/file1 
  File: dir1/file1
  Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
Device: 804h/2052d	Inode: 100784064   Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/  ivakon)   Gid: ( 1000/  ivakon)
Access: 2024-08-25 21:24:05.452681814 +0300
Modify: 2024-08-25 21:24:05.452681814 +0300
Change: 2024-08-25 21:24:05.452681814 +0300
 Birth: -
  File: dir2/dir1/file1
  Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
Device: 804h/2052d	Inode: 67175290    Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/  ivakon)   Gid: ( 1000/  ivakon)
Access: 2024-08-25 21:27:21.337045129 +0300
Modify: 2024-08-25 21:24:05.000000000 +0300
Change: 2024-08-25 21:27:21.337045129 +0300
 Birth: -

Я вижу, что modify time не меняется.

kostik87 ★★★★★
()
Ответ на: комментарий от aol

с sudo также пробовал распаковать - дата создания файлов меняется. В гуишном 7з на винде, по моему если галочки поставить на сохранение метаданных то она сжимает файлы, затем куда то в конец отдельно сохраняет метаданные файлов и при распаковке, то есть после распаковки меняет все метаданные.

Sapetuko ★★
() автор топика
Ответ на: комментарий от kostik87

создаю к примеру текстовый файл(банальной контекстное меню, создать файл..) - момент когда создаю и есть - дата создания, затем через полчаса редактирую его и добавляю текст - меняется дата модификации, дата создания остается таким как и было.

А вот если этот текстовый документ скопировать на другой диск то дата создания снова поменяется, так как на этом диске он только что создался. Можно конечно тотал командером копировать так чтобы дата создания не поменялся..

Sapetuko ★★
() автор топика
Ответ на: комментарий от Sapetuko

Покажи вывод команд, которые привёл я.

В Linux по классике не учитывается время создания файла.

Учитывается три времени:

  • access time - время доступа, когда файл открыли на просмотр;
  • modify time - время, когда изменили данные в файле;
  • change time - время, когда изменили параметры файла, например владельца, информацию о правах доступа.

Здесь нет времени создания файла.

Modify time в приведённых выше командах архивирования остаётся неизменным.

kostik87 ★★★★★
()
Ответ на: комментарий от kostik87

Modify time и так не менялся, если даже через гуи линуксовый запаковать распаковать(кеды, арк)..
Но поле Created в Dolphin есть.

ls -ls для папки которую я архивирую показать? Ааа наверное для двух одинаковых файлов один из которых из архива вытащил а другой оригинал?

Смысла думаю не так чтобы.. они у вас не показывают дату создания, поэтому у меня думаю тоже самое будет.

Sapetuko ★★
() автор топика
Ответ на: комментарий от Sapetuko

Как я уже сказал, в стандарте posix нет времени создания файла.

У меня Debian 10 на ноуте.

Тем не менее в некоторых ФС добавлено поле с датой создания файла.

Обработка поля в выводе утилиты stat появилось с coreutils 8.31, в Debian 10 пакет coreutils версии 8.30.

Но думаю утилита tar всё равно не сможет сохранять информацию о дате создания.

Либо используй то, что я привёл, либо используй 7z для архивации и распаковки.

Правда не совсем понятно зачем тебе сохранять это время.

Утилита ls показывает не дату и время создания, а время модификации.

kostik87 ★★★★★
()
Ответ на: комментарий от kostik87

дата создания как по мне очень нужный и важный.. мета данный, например фото, видео - когда снято? Понятно что в название можно впихнуть, оно обычно так и бывает но есть исключение.

P.S. можно конечно в метаданные самой картинки что то типа время снимка ну это просто пример.

Погуглил, команда stat показывает нужную инфу. Birth , выше как раз писали про него.

Sapetuko ★★
() автор топика
Ответ на: комментарий от kostik87

так вроде нельзя? Я же в самом начале писал что гуи 7зип на винде галочки ставлю и работает и что помогите командой для 7зипа тут, на линуксе

Или гуи на линукс для 7зипа тоже есть? Да вроде нет..

Sapetuko ★★
() автор топика
Ответ на: комментарий от Sapetuko

Пробовал набрать 7z –help - там что то не густо.
На винде гуишка 7зипа показывает: tc ta -stl- Если убрать галочки то они меняются..

Так, например если на линуксе набрать 7z a -stl name.7z filename

То дата модификации и дата создания архива такое же как и у файла, который я заархивировал.

Sapetuko ★★
() автор топика
Последнее исправление: Sapetuko (всего исправлений: 2)

все не то, похоже версия 7зипа для линукса просто не умеет работать с датой создания файла.

Три раза перечитал 7z --help и там нет ничего что нужно.

Sapetuko ★★
() автор топика
Ответ на: комментарий от annulen

Если нет особых требований к степени сжатия то нет смысла использовать что-то кроме gzip. Потому что gzip - дефолт, команду «tar czf» все наверно помнят наизусть, и незачем тратить лишние секунды на вспоминание хотя бы ключа для другого сжатия, не говоря уже про ужас с -I где ещё и синтаксис компрессора надо вспоминать.

А ещё про архив tgz у тебя практически 100% гарантия что он откроется на любом юниксе с первого раза без дополнительных размышлений и удивлений того кто его распаковывает. Ну и с виндой совместимость хорошая, хоть и не идеальная - winrar с каких-то древних версий его поддерживает, и обычно либо он либо 7zip (он уже новее) на виндокомпе имеется.

firkax ★★★★★
()

На винде все просто - запуск гуи 7-зип, в настройках ставим галочки чтобы сохранило метаданные файлов и все.

Ну если надо на таком уровне – миднайт коммандером заходишь в архивируемый каталог, жмёшь F2 а дальше обычно троечку (в зависимости от того, что она тебе в меню напишет). Она запросит имя архива, по умолчанию совпадёт с именем каталога.

За все метаданные не ручаюсь, но атрибуты (в частности, исполняемый) и даты модификации оно мне в .tar.bz2 сохраняет успешно.

hobbit ★★★★★
()
Ответ на: комментарий от hobbit

дата модификации и так сохраняется, по умолчанию. Мне как раз дата создания, уже начал гуглить командой копирования, рсинхом.. То есть цель теперь если в архив нельзя то куда то на нтфс диск скопировать и уже на винде в архив закатать.

Похоже надо Тотал Коммандер запускать через Wine, он точно умеет сохранять дату создания. Вернее он сначало копирует потом меняет даты на новых файлах.

Sapetuko ★★
() автор топика
Последнее исправление: Sapetuko (всего исправлений: 3)
Ответ на: комментарий от Sapetuko

дата создания как по мне очень нужный и важный.. мета данный, например фото, видео - когда снято?

Это обычно в дате модификации указывается, и именно её все стараются сохранить, а остальные обычно забивают. А дата создания в линуксе это вообще экзотика, про то что такая информация вообще может существовать большинство не в курсе.

firkax ★★★★★
()
Ответ на: комментарий от Sapetuko

дата создания файла локальна для фс. по дефолту создаешь файл, и в него прописывается текущая дата. и это правильно с одной стороны.
и только после создания файла ему можно присвоить другие даты, т.е. отдельная опция разархиватора.

pfg ★★★★★
()
Последнее исправление: pfg (всего исправлений: 1)
Ответ на: комментарий от Sapetuko

проверил. даты в архив записываются. для одного файла прописал датe 1998 - записалась.

~/run$ unsquashfs -llc ./222.sfs
-rw-r--r-- pfg/pfg                 3 2024-08-26 00:43 squashfs-root/222
-rw-r--r-- pfg/pfg                 7 1998-08-26 04:49 squashfs-root/ollld
-rw-r--r-- pfg/pfg                 5 2024-08-26 00:48 squashfs-root/rerwerwe

~/run$ ls -l ./111
-rw-r--r-- 1 pfg pfg 3 авг 26 00:43 222
-rw-r--r-- 1 pfg pfg 7 авг 26  1998 ollld
-rw-r--r-- 1 pfg pfg 5 авг 26 00:48 rerwerwe

надо будет поковырять, никогда таким не задумывался.
даты в фотках пишутся внутрь файла, в EXIF.
метатеги файла вещчъ крайне непостоянная.

pfg ★★★★★
()
Ответ на: комментарий от firkax

А дата создания в линуксе это вообще экзотика

Ext4 её точно поддерживает (см. поле Birth в выхлопе команды stat, например).

P.S. Гугл подсказывает, что не только Ext4, но и Btrfs, JFS и XFS (v5+), и есть statx, который его извлекает (смотреть упоминания stx_btime). Так что нет, для современных линуксов, начиная с ядра 4.11, это уже не экзотика.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от Sapetuko

Я же в самом начале писал что гуи 7зип на винде галочки ставлю и работает

Уточни, ты в винде при этом файл какого формата создавал – .7z или .zip? А то 7zip GUI позволяет и то и другое делать, если что.

«Тотал Коммандер запускать через Wine» это всё-таки не наш метод, лучше бы с задачей грамотно разобраться. Может, даже автору архиватора написать.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 2)
Ответ на: комментарий от hobbit

В формате .7z, но там без разницы; .zip - тоже можно в опциях галочки поставить и дата создания сохранится(.7z и .zip - сохраняют все). И если открыть архив утилитой гуишной от 7z, нажав F9 активировать двухпанельный режим, в нем выбрать место куда извлечь, в панели утилиты нажать COPY или MOVE то файлы извлекутся с сохранением всей информации.

А вот если выбрать .tar то уже все, даты создания нет(банально галочки нету чтобы поставить), там же еще метод компресии выбрать - GNU or POSIX, при последнем, можно допольнительно сохранить дату accessed.

Винрар кстати тоже сохраняет все но с ним я не нашел метода чтобы вытащить из архива файлы и при этом сохранить исходные даты создания файлов.

Sapetuko ★★
() автор топика
Последнее исправление: Sapetuko (всего исправлений: 2)
Ответ на: комментарий от hobbit

Поддержка может и быть, но по факту дату модификации понимают и уважают практически все, ctime/atime - знают что эти таймстампы тоже зачем-то есть (причём про atime большинство знают что оно бесполезное и его надо сразу отключать в fstab), а про btime - обычно не знают вообще или путают его с ctime (потому что c расшифровывают как create), что вобщем-то ни на что в итоге не влияет т.к. оба поля по сути для красоты.

firkax ★★★★★
()