У меня есть 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'