Как мне извлечь только нужные файлы из tar.gz? - PullRequest
2 голосов
/ 17 мая 2019

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

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

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

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

Примечание: все банки имеют уникальные / разные названия.

Ответы [ 3 ]

3 голосов
/ 17 мая 2019

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

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
0 голосов
/ 17 мая 2019

Для этого можно использовать xargs:

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

Затем, чтобы переместить все файлы в корневой каталог

find archive_root_dir -type f -exec mv -i {} . \;
0 голосов
/ 17 мая 2019

Вы можете создать файл с нужным вам шаблоном:

echo "*SNAPSHOT*.jar" > target

Если у вас есть несколько шаблонов, вы можете добавить несколько строк в целевой файл

echo "*.md" >> target

ЗатемВы можете использовать ключ --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

Если всефайлы имеют уникальные имена файлов, как сказал ОП, вы можете использовать --strip-components для удаления структуры файла

tar -xf samplejars.tar.gz --files-from=filename --strip-components 2

С моими данными результат был:

ANOTHER_SNAPSHOT.jar
SNAPSHOT.jar
SNAPSHOT-2.jar

Поскольку у меня не было уникальных имен, один из файлов SNAPSHOT.jar был перезаписан на шаге --strip-components.

...