使 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 命令,以便它只提取目錄路徑中某處具有字串「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'

相關內容