-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, буду рад изучить их в комментариях к заметке. Уверен, найдутся действительно стоящие идеи!

