найти файл в архиве tar.gz


12

Можно ли использовать findкоманду для поиска файлов в архиве tar.gz, также используя подстановочные знаки?

нравиться

find archive.tar.gz --name *foo*

Ответы:


17

Как насчет просто:

$ tar tf archive.tar.gz | grep foo

Разве это не просто список всех файлов?
зажим

@clamp Да, если вы хотите что-то сделать с каждым файлом, просто передайте этот вывод другой команде.

Благодарность! извините, но я новичок в Unix. я попробовал: tar tf graphics.tar.gz | find . --name *space*но там написаноunkown predicate --name
зажимаем

findАргументы @clamp занимают только одну черту, но поскольку это список файлов на stdin, вы хотите использовать grepвместо него, как пример кода hesse. Попробуйтеtar tf graphics.tar.gz | grep 'space'
Кевин

1
grep *foo*недопустимое регулярное выражение. gregне понимает глобусы, он понимает регулярные выражения. Попробуй grep fooвместо этого.
Алексиос

3

Смонтируйте архив как каталог. Вы можете сделать это с файловой системой AVFS , которая позволяет вам получить доступ к любому архиву в виде каталога, имя которого заканчивается #.

mountavfs
cd ~/.avfs$PWD
find archive.tar.gz\# -name '*foo*'

не работает для gzip
van abel

@vanabel GZIP-файл не содержит других файлов. Это всего лишь один файл, сжатый. Так что нет «внутри», чтобы искать в нем.
Жиль: «Хватит быть злым»

2

Я думаю, что это работает без трубы и grep.

как это: tar tvf archive.tar.gz "foo"

таким образом, шары также будут работать.

tar tvf archive.tar.gz "*.foo"

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.