我有一个 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 命令,以便它只提取目录路径中某处具有字符串“acme”的 3 个“txt”文件(因此它只提取 2.txt、3.txt 和 4.txt)?
答案1
您的示例之所以有效,是因为您的工作目录中unzip foo.zip *.txt
没有文件。*.txt
否则*.txt
shell 会扩展为目录中文本文件的名称。为了安全起见,您需要引用它。
由于unzip
使用了 glob,因此使用
unzip foo.zip '*acme*/*.txt'
甚至
unzip foo.zip '*acme*.txt'
如果您不想恢复原始目录结构并将文件解压到当前工作目录,请添加选项-j
:
unzip -j foo.zip '*acme*/*.txt'