О
Остальные 90%
@final90percent777 подп.
715просмотров
92.0%от подписчиков
25 апреля 2025 г.
Score: 787
Продолжим обсуждение - примером "продвинутой" команды может служить обновление файла в архиве, использующее обычную операцию добавления -r/--append. Обновление файла в архиве реализовано через дописывание новой версии файла в конец архива под тем же именем: tar может содержать сразу несколько копий одного файла. Распаковка файлов происходит тоже последовательно, с начала архива, и в результате, поочерёдно извлекая файлы из архива, операция -x создаёт только последний файл, который перетрёт все извлечённые ранее: # Change contents of d.txt and update the file $ echo 321 > a/b/c/d.txt $ tar -rf archive.tar a/b/c/d.txt # See 2 versions here $ tar -vtf archive.tar drwxrwxr-x mint/mint 0 2025-04-24 00:01 a/ drwxrwxr-x mint/mint 0 2025-04-24 00:01 a/b/ drwxrwxr-x mint/mint 0 2025-04-24 00:01 a/b/c/ -rw-rw-r-- mint/mint 4 2025-04-24 00:01 a/b/c/d.txt -rw-rw-r-- mint/mint 4 2025-04-24 00:21 a/b/c/d.txt # tar -x would create the last version of d.txt $ rm -rf a/ $ tar -xf archive.tar $ cat a/b/c/d.txt 321 Что интересно, операция извлечения файла действительно сначала создаст старую версию файла, и затем заменит её новой. Это видно, если использовать ключик -O/--to-stdout, печатающий содержимое файлов вместо их создания: $ tar -xf archive.tar a/b/c/d.txt -O 123 321 Извлечь конкретную версию можно, указав её номер при помощи ключа --occurence: # Note creation time $ tar -vtf archive.tar --occurrence=1 a/b/c/d.txt -rw-rw-r-- mint/mint 4 2025-04-24 00:01 a/b/c/d.txt # Extract file to stdout: old contents! $ tar -xf archive.tar --occurrence=1 a/b/c/d.txt -O 123 # New contents are here as well $ tar -xf archive.tar --occurrence=2 a/b/c/d.txt -O 321 Этакий бекап для бедных :) Кроме того, самому архиву можно назначать метку. Это может пригодиться, чтобы, например, наверняка сохранить время создания бекапа: $ tar -cf backup.tar a/ -V "Created at $(date)" # --list shows the label! $ tar -tf backup.tar created at Thu Apr 24 23:23:04 MSK 2025 a/ a/b/ a/b/c/ a/b/c/d.txt Утилита GNU tar предлагает огромное количество прочих полезных действий, применение которым найти уже сложнее, и не умещаются в заметку. Скажем, tar можно заставить вызвать интерактивную сессию Bash # Press ! after prompt $ tar -cf tmp.tar a/ -L 2 Prepare volume #2 for ‘tmp.tar’ and hit return: ~ $ echo SHLVL 2 или разбить архив на несколько файлов, каждый из которых поместить на отдельный диск - на случай, если архив слишком большой. Документация GNU tar однозначно заслуживает изучения. Если вам приходилось использовать непопулярные возможности tar, буду рад изучить их в комментариях к заметке. Уверен, найдутся действительно стоящие идеи!
715
просмотров
2769
символов
Нет
эмодзи
Нет
медиа

Другие посты @final90percent

Все посты канала →
Продолжим обсуждение - примером "продвинутой" команды может — @final90percent | PostSniper