Как мне извлечь только нужные файлы из tar.gz?

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

Я пытался использовать подстановочные знаки, но это не помогло. Пример:

    tar -xf samplejars.tar.gz --wildcards "*SNAPSHOT*.jar"

В файле samplejars.tar.gz есть много папок, и я хочу только извлечь SNAPSHOT .jar. Как я могу это сделать?

Всего 3 ответа


Я проверил это со следующей структурой папок:

data/
data/a
data/a/ANOTHER_SNAPSHOT.jar
data/b
data/c
data/c/SNAPSHOT.jar
data/d
data/e
data/f
data/f/SNAPSHOT.jar.with.extension
data/g
data/g/SNAPSHOT.jar
data/h

Следующая маска подстановки работает и извлекает только те файлы, которые соответствуют SNAPSHOT.jar, а не SNAPSHOT.jar.with.extension и ANOTHER_SNAPSHOT.jar

tar -xf data.tar.gz --wildcards "*/SNAPSHOT.jar"

Результат:

data/c/SNAPSHOT.jar
data/g/SNAPSHOT.jar

Вы можете использовать xargs для этого:

tar -tf data.tar.gz | grep SNAPSHOT.jar | xargs tar -xf data.tar.gz 

Вы можете создать файл с шаблоном, который вы ищете:

echo "*SNAPSHOT*.jar" > filename

Затем вы можете использовать ключ --files-from:

tar -xf samplejars.tar.gz --files-from=filename

Я проверил с

data/
data/a/
data/a/ANOTHER_SNAPSHOT.jar
data/b/
data/c/
data/c/SNAPSHOT.jar
data/d/
data/e/
data/f/
data/f/SNAPSHOT.jar.with.extension
data/g/
data/g/SNAPSHOT-2.jar
data/g/SNAPSHOT.jar
data/h/

Результат

data/a/ANOTHER_SNAPSHOT.jar
data/c/SNAPSHOT.jar
data/g/SNAPSHOT-2.jar
data/g/SNAPSHOT.jar

Есть идеи?

10000