Wildcards

使 Linux 解壓縮命令只是從名稱包含給定字元串的目錄中提取文件

  • May 27, 2021

我有一個包含文件目錄層次結構的 zip 存檔。我想使用 Linux 解壓縮命令僅提取這些文件的子集,這些文件在指向文件的目錄路徑中的某處具有特定字元串。

例如,假設文件 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)?

您的範例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'

引用自:https://unix.stackexchange.com/questions/651569