Чи видаляє tar -xvf наявні файли з каталогу?


10

У мене є архів дьогтю і я хочу його використовувати tar -xvf.
У цьому архіві дьогтів у мене є дерево каталогів, яке містить пару файлів. У моїй системі solaris 10 це дерево каталогів вже існує і в ньому є кілька файлів.
Якщо я розпакую архів, буде перезаписано все дерево каталогів чи перезаписані лише файли, що містяться в архіві?
Чи видаляються файли, які не мають кореспондента в архіві?


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

Відповідь - ні. Якщо ви думаєте достатньо важко, то зрозумієте, що не має сенсу, що програма, яка витягує файли з архіву, видалила б абсолютно непов'язані файли.
Фоско

Відповіді:


6

Дублікати файлів, які вже існують, можуть бути розпаковані та перезаписані залежно від вашої системи. Однак зазвичай це робиться за замовчуванням. Файли, які знаходяться в архіві, але не у вашій системі, будуть просто додані до нових або існуючих каталогів у вашій системі.

Бруд /test

/1/a
c

Архів test.tar

/1/b
d

ймовірно, буде об'єднано:

/1/a
/1/b
c
d

Якщо додати -kпрапор до команди tar, переконайтеся, що жоден з файлів у вашому цільовому каталозі не буде перезаписаний:

tar -xvkf test.tar

@BP: Перезапис може бути залежним від оболонки, оскільки csh (все ще оболонка за замовчуванням у Sun?) Мала змінну оболонки "noclobber", яка при встановленні запобігає випадковому перезапису.
готелі

Дякую BloodPhilia та готелю. Я зробив тест на своїй системі і tar -xvf перезаписує файли, які вже є, і додає ті, які не існують. Що я хотів би знати, якщо є ймовірність, що весь каталог повинен бути перезаписаний і таким чином втратити файли, які були в моїй системі в цьому каталозі, але не були в архіві? Наприклад: у мене є dir.tar dir / file2. У моїй системі у мене є dir / file1, dir / file2 та dir / file3. Чи можливо, якщо я виконую tar -xvf dir.tar, весь dir буде перезаписаний і більше не буде містити file1 та file3?
Феліція

@hotei: noclobber(який також існує в оболонках POSIX btw) впливає лише на файли, перенаправлені на з >fooоболонки. Він не впливає на дьоготь.
Жил "ТАК - перестань бути злим"

@hotei noclobber заважає перезаписати файли шляхом перенаправлення в оболонку. Так що echo foo > bar.txtне буде замінено bar.txt, якщо він існує. Це не впливає на те, що програма, наприклад tar, буде перезаписати.
KeithB

1
@Felicia: За даними Single Unix, tar не стирає файли, які не були в архіві. Він замінить наявні файли із вмістом (але не режимами) з архіву. Можливо, існують невідповідні тари, але я сумніваюся, що будь-яка з них замінить непов'язані файли, такі як dir/file1.
Жил "ТАК - перестань бути злим"

0

Найпростіший спосіб - створити новий, порожній каталог, записати його в компакт-диск і витягнути з нього файли. Вам потрібно бути обережним, хоча витягнуті файли відносні (починаються з ./), а не абсолютні (починаються з /). Проведіть зміст менше, щоб побачити, у чому справа, якщо ви цього не знаєте (tar -tvf tar_filename | менше)

Ви можете дізнатися, чи перезаписана версія дьогтю за замовчуванням чи ні, переглянувши довідкову сторінку. Тар не буде видаляти файли під час вилучення, що є ще однією причиною, коли люди зазвичай починають з нового, порожнього каталогу, перш ніж робити витяг.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.