2016-08-15 13 views
1

Я пытаюсь запустить некоторые тесты, которые принимают входной файл tar.Структура .tar файлов

Теперь в файле tar есть файл runme.sh, который необходимо изменить, и папка должна быть снова сделана .tar.

Исходный бенчмарк работает, но его не изменяет. Я считаю, что это проблема с файловым форматом.

Примечание: Мое изменение не создает проблему. Если я просто распакую рабочий tar и tar, но без изменений, он не работает. Неожиданно меняется размер нового файла.

Что я пробовал:

  1. file команда на рабочих и нерабочих файлов дегтя. Оба вернулись же POSIX tar archive

  2. Пытался запустить команду tar cvf folder_name.tar folder_name/ не работает.

Что работает:

я на Ubuntu (14.04), и я дважды нажал на дегтя, редактироваться файл я хотел, и обновленное его. Это работает, но не является возможным решением, так как у меня большое количество файлов, и я хочу написать сценарий для его автоматизации.

Скриншот того, как он работает с графическим интерфейсом:

enter image description here

ответ

2

Включается ли исходный файл деготь имя каталога верхнего уровня? Это не похоже на скриншот. Если вы заново создаете файл tar с каталогом верхнего уровня, как указано в пункте 2 в том, что вы пытались, структура не будет одинаковой, и любая программа, пытающаяся использовать tar-файл, не сможет проанализируйте его.

Как вы протестируете «Если я просто раскодирую рабочий tar и tar без изменений, это не сработает». В графическом интерфейсе или в оболочке? Если в оболочке - какие точные команды вы используете?

В оболочке вы можете получить содержимое tarball командой tar -tf filename.tar. Если все файлы, указанные в этом списке, начинаются с того же имени папки, ваш архив содержит каталог верхнего уровня. Если он просто перечисляет различные файлы и подкаталоги, это не так. (Тарболы, которые не являются мерзостью, но если для чего вы их используете, это вам нужно будет справиться.)

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

Следующие должны работать в оболочке, если у вас есть/нужен тарболл без верхнего уровня каталог:

$ mkdir workdir 
$ cd workdir 
$ tar -xf ../tarball.tar 
<edit your file however you like> 
$ tar -cf ../tarball-new.tar * 
$ cd .. 
$ rm -r workdir 

В случае, если вы/нужен тарболл с верхнего уровня каталогов, следующий должен хватает:

$ tar -xf ../tarball.tar 
$ cd toplevel_directory 
<edit your file however you like> 
$ cd .. 
$ tar -cf tarball-new.tar toplevel_directory 
$ rm -r toplevel_directory 

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

+0

Вывод 'tar -tf' http://i.imgur.com/jXysZSf.jpg Идеальный анализ. Спасибо. Я попробую ваше решение. – PRP

+0

Ваше решение работает. Большое спасибо за ваше время. – PRP