У меня есть большой файл, foo.tar.xz
который содержит много (скажем, 200000) файлов. Я выяснил, что этот архив содержит несколько (около 5000) файлов, которые мне не нужны. У меня недостаточно места на диске, чтобы распаковать все это на мой диск; Кроме того, я боюсь, что атрибуты / права могут быть потеряны, если я это сделаю. У меня достаточно места для размещения двух копий сжатого архива. Существует ли инструмент для удаления некоторых файлов из архива (с регулярным выражением в имени файла) на лету, то есть без распаковки архива в отдельные файлы?
17
gtar --delete
.-T
работает с--delete
и--wildcards
позволяет вам использовать шаблоны, а не имена файлов, поэтому создайте временный файл, содержащий шаблоны и их использованиеunxz < file.tar.xz | tar --wildcards --delete -T patternfile | xz > file2.tar.xz
. Он не будет выполнять полное регулярное выражение (если вам это нужно, просто используйтеtar -t
и создайте список имен файлов для удаления), только шаблоны соответствия файлов.(отредактировано, поскольку я неправильно понял вопрос, который был также отредактирован)
Лучшее, что вы можете сделать, - это извлечь, удалить и повторно сжать весь файл.
unxz < foobar-old.tar.xz | tar --delete foo/bar | xz > foobar-new.tar.xz
Невозможно удалить файлы из tar напрямую.
деготь представляет собой поток, первоначально предназначенный для ленточных накопителей, которые не делают случайных изыскивает хорошо - хотя теоретически это может быть возможно на диске файловой системы пробивать отверстие / переписать оставшийся файл со сжатием точка является спорным, поскольку большинство, если не все Методы сжатия сильно зависят от содержимого, которое ранее встречалось в файле. Чтобы сделать это на месте, вам понадобятся очень подробные знания как о методе сжатия, так и о формате файла tar. Это сложность до такой степени, что никто бы даже не стал беспокоиться об этом. Дешевле просто хранить файлы и игнорировать их.
Если вам нужна эта функциональность, вероятно, tar - это не то, что вам нужно.
источник
--wildcards
помочь ... Я должен был включить./
в начале шаблона, хотя ...Согласно руководству , вы можете передать список имен файлов, чтобы
tar
извлечь их. Например:источник