редактировать текстовый файл в несжатом формате .tar - PullRequest
0 голосов
/ 03 мая 2018

Я создал несколько папок .tar, которые по большей части содержат текстовые файлы. Можно ли программно редактировать текстовый файл из командной строки (bash и связанные с ним инструменты) без полной распаковки tar?

Контекст: эти .tar были созданы скриптом, и я понял, что допустил ошибку. Я ищу наиболее эффективное и простое решение для редактирования части одной строки текстового файла.

Ответы [ 3 ]

0 голосов
/ 03 мая 2018

Вы можете использовать tar --delete и tar --update для замены файла внутри tar

0 голосов
/ 03 мая 2018

Спасибо за вдохновение, Грэмми, вот минимальный пример, если кто-то ищет то же самое. Создайте некоторые данные в папке:

cd /tmp; 
mkdir dir1; 
echo "foo" >> ./dir1/test_txt; 
echo "bar" >> ./dir1/test_txt; 

Упаковка в смолу:

tar -cf test_tar.tar dir1;

Удалите каталог, который мы собираемся распаковать и отредактировать.

rm -rf dir1; 

И распакуйте только соответствующий файл из папки tar и отредактируйте:

ВНИМАНИЕ:

Tar обновляется, только если отметка времени изменилась с момента последнего редактирования!

Вот почему здесь есть команда режима сна (для изменения метки времени.).

sleep 1
tar -xf test_tar.tar dir1/test_txt
sed -i 's/foo/baar/' dir1/test_txt ; 

Обновите соответствующий файл.

tar -uf test_tar.tar dir1/test_txt

Проверьте, сработало ли это:

tar -xf test_tar.tar dir1
cat ./dir1/test_txt

[...]$ 
baar
bar
0 голосов
/ 03 мая 2018

Я думаю, что вы не сможете сделать это без распаковки. Вы можете сделать цикл для распаковки только вашего текстового файла, отредактировать с помощью sed и снова сжать. В другом случае я думаю, что это невозможно ...

может быть что-то вроде этого

xzcat blah | sed /../../ | xz blah

внутри цикла, который проходит через все файлы

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