Рейтинг:1

GNU tar - обновить файл tar, перезаписав исходный файл в командной строке (что возможно путем перетаскивания в диспетчере архивов)

флаг cn

Я хочу обновить файл tar с измененной частью содержимого, перезаписав исходный файл в сценарии.

Я пытался смола -у, и , но никто не делает то, что я хочу. Я также пробовал с --перезаписать.

Простой тест:

компакт-диск ~
мкдир тест
эхо-фу > test1.txt
mkdir test_dir
компакт-диск test_dir
эхо-бар > test2.txt
CD ../..
tar cvf test.tar тест
tar tvf test.tar # проверить содержимое
эхо варвар >> test/test_dir/test2.txt
tar rvf test.jar test # или avf, или uvf, это одно и то же: модифицированный файл не перезаписывает исходный файл в tar
  • -u --перезаписать теоретически будет "обновляться", но на самом деле он только добавляет, а не добавляет измененный файл, поэтому я вижу два test1.txt и один test2.txt там в смоле, с test2.txt будучи старым
  • -А --перезаписать теоретически добавит, но ошибки: tar: тест: ошибка чтения в байте 0, при чтении 1024 байта: это каталог tar: ошибка неустранима: выход сейчас
  • -r --перезаписать теоретически будет «добавляться», но будет только добавляться, а не перезаписываться, поэтому я вижу два test1.txt и два test2.txt в смоле.

Я подумал: ОК, тогда tar не включает возможность обновления tar на месте. Но затем я вспоминаю, что этого можно легко добиться, перетащив новую папку в файл tar в Gnome (я думаю, что это обрабатывается «Менеджером архивов»), так что это по крайней мере возможно.

Как я могу перезаписать файлы в tar в командной строке/скрипте?

SaveUkraine-StartPeaceTalk avatar
флаг cn
связанный материал: https://www.gnu.org/software/tar/manual/html_node/Dealing-with-Old-Files.html
SaveUkraine-StartPeaceTalk avatar
флаг cn
Связанный: https://www.linuxquestions.org/questions/linux-newbie-8/how-to-overwrite-existing-files-by-using-tar-command-remove-extra-files-4175489175/#post5087034
WesternGun avatar
флаг cn
Нет, это не решает мою проблему. Пожалуйста, если вы действительно хотите помочь, сначала проверьте это: `-u` в этой ссылке добавит другой файл с таким же именем; если я удаляю по имени, есть два файла с одинаковым именем, как я могу быть уверен, что удаляю тот файл, который мне не нужен? Я имею в виду, что есть причина, по которой я спрашиваю здесь, потому что я не могу найти ничего, что работает, погуглив в другом месте.
флаг ru
Вы оба остынете. Комментарии к этому вопросу теперь заблокированы на следующую неделю, чтобы вы двое не ссорились.
Рейтинг:2
флаг cn

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

способ, которым приложение «менеджер архива», вероятно, делает это, немного более продвинут, и я бы не стал пытаться подражать этому поведению в bash, но это не значит, что вы не должны пытаться...

WesternGun avatar
флаг cn
Да, это то, что я хочу попробовать, спасибо. Я удалю исходный файл из tar и добавлю модифицированный.
Рейтинг:0
флаг cn

Я нашел этот абзац в GNU смола doc, поэтому перезапись не поддерживается смола. Я удалю исходный файл из tar и добавлю модифицированный.

https://www.gnu.org/software/tar/manual/html_node/how-to-update.html#how-to-update

4.2.3.1 Как обновить архив с помощью «--update»

Вы должны использовать аргументы имени файла с операцией "--update" ( "-u"). Если вы не укажете какие-либо файлы, tar не будет работать ни с какими файлами и не сообщит вам, что он ничего не делал (что может вас сбить с толку).

Чтобы увидеть, как работает опция «--update», создайте новый файл «classical» в каталоге вашей практики и добавьте дополнительный текст в файл «blues» с помощью любого текстового редактора. . Затем запустите tar с операцией «update» и опцией «--verbose» (â-v) с указанием имен всех файлов в каталоге «practice». в качестве аргументов имени файла:

$ tar --update -v -f collection.tar блюз фолк рок классика
блюз
классический
$

Поскольку мы указали подробный режим, tar выводит имена файлов, над которыми он работает, которые в данном случае являются именами файлов, которые необходимо обновить. Если вы запустите «tar --list» и просмотрите архив, вы увидите «блюз» и «классика» в конце. Всего будет две версии участника "blues"; тот, что в конце, будет новее и больше, так как вы добавили текст перед его обновлением.

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

РЕДАКТИРОВАТЬ: --удалять не работает/очень медленно. Кажется, что удалить файлы из tar не очень-то возможно, возможно, так задумано. Я думаю, что мне нужно извлечь/удалить/переупаковать или: https://unix.stackexchange.com/questions/68732/удалить-файлы-из-tar-архива но пока не знаю как.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.