найти файл в архиве 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"

Саид Сепер
источник