从多个 zip 文件中解压缩特定文件

从多个 zip 文件中解压缩特定文件

我是 Unix 新手,正在尝试从多个 zip 文件中提取特定模式文件名。我用来find查找 zip 文件,然后尝试提取 zip 文件中文件名为 CTL 的文件a*b*zip

$ unzip -jn 'find $source_dir -mtime -$st_d -daystart -iname "a*zip"' \
    *CTL* -d $target_dir`

除此之外我尝试使用:

$ find -type f -newermt $start_date \! -newermt $end_date -name "a*zip" \
    | while read filename; do unzip -d $target_dir; done;`

但这是提取所有文件,但我只查找那些具有文件名的文件CTL

答案1

您可以简单地find -exec单独使用来做到这一点。

find . -type f -name '*.zip' -exec unzip {}  '*CTL*' -d "$target_dir" \;

解释: -exec{}将在找到替换文件名的每个文件上执行以下命令。该命令必须由 终止;\;在末尾使用(';' 转义\) 以避免 shell 将;for 自身解释为 for 的终止,而是将其作为常规文本find传递。find

另外,请注意,当文件模式作为参数传递时,最好将文件模式括在引号中,即'*CTL*'与仅*CTL*.这样做时,您可以避免让 shell 扩展文件名。例如,假设在这种情况下,您的一个 zip 文件的文件名中包含 CTL(例如abcCTL.zip)。如果您仅使用*CTL*模式,shell 将扩展它,而不是将模式传递给unzip,而是传递文件名abcCTL.zip,这显然不是您想要的。

相关内容