Заставить команду Linux unzip просто извлекать файлы из каталогов, имена которых содержат заданную строку

Заставить команду Linux unzip просто извлекать файлы из каталогов, имена которых содержат заданную строку

У меня есть zip-архив, содержащий иерархию каталогов файлов. Я хочу использовать команду Linux unzip для извлечения только подмножества этих файлов, которые имеют определенную строку где-то в пути каталога, ведущем к файлу.

Например, предположим, что файл foo.zip содержит следующие файлы:

a/1.txt
acme/2.txt
a/acme/b/3.txt
a/b/acmenet/c/4.txt
a/b/c/5.txt
a/acme/d/6.php

Команда Linux «unzip foo.zip *.txt» извлечет все 5 файлов «txt».

Как можно изменить эту команду Linux так, чтобы она извлекала только 3 файла «txt», содержащие строку «acme» где-то в пути к каталогу (то есть она извлекала бы только файлы 2.txt, 3.txt и 4.txt)?

решение1

Ваш пример сработал только потому, что в вашем рабочем каталоге unzip foo.zip *.txtне было файла. В противном случае он был бы расширен оболочкой до имен текстовых файлов в вашем каталоге. Вам нужно заключить его в кавычки, чтобы быть уверенным.*.txt*.txt

Так как unzipиспользует глобусы, используйте

unzip foo.zip '*acme*/*.txt'

или даже

unzip foo.zip '*acme*.txt'

Если вы не хотите восстанавливать исходную структуру каталогов и извлекать файлы в текущий рабочий каталог, добавьте опцию -j:

unzip -j foo.zip '*acme*/*.txt'

Связанный контент