знайти файл в архіві 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 не містить інших файлів. Це лише один файл, стислий. Тож немає "всередині", щоб шукати.
Жил "SO - перестань бути злим"

2

Я думаю, що це працює без труби та грепа.

подобається це: tar tvf archive.tar.gz "foo"

оскільки таким чином працюватимуть і глобуси.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.