【问题标题】:How to unzip and re-zip files into subdirectory with the same name as .zip file?如何将文件解压缩并重新压缩到与 .zip 文件同名的子目录中?
【发布时间】:2016-12-28 04:40:54
【问题描述】:

总结
我需要“修复”整个文件系统中的一批 .zip 文件,方法是:

  • 将其名称中的“”(空格)替换为“_”,以及其内容文件的名称
  • 重新压缩它们

解压卡住了,因为 "$(dirname "$0")/$(basename "$0")" 抛出错误。

更长的描述。
文件层次结构:

banners/
       |
       germany/
       |      |
       |      active/
       |      |     |
       |      |     300x250/
       |      |     |      |
       |      |     |      file.jpg
       |      |     |      AC2 xx.zip
       |      |     |
       |      |     600x228/
       |      |            |
       |      |            file.jpg
       |      |            AC4 xx.zip
       |      nautics/
       |
       |
       austria/
       |
       ...

这是我尝试过的:

~/banners/> find . -name "*" -exec sh -c 'mv -- "$0" "$(0// /_)"' {} \;

在这里,我从banners/ 向下删除了所有文件名/目录名中的所有空格。
AC2 xx.zip 现在看起来像AC2_xx.zip

我现在需要将这些 .zip 文件解压缩到一个新的子目录中,与 .zip 文件本身处于同一级别,与这些 .zip 文件命名相同。

这是我尝试过的命令:

find . -name "*.zip" -exec sh -c 'unzip "$0" "$(dirname "$0")/$(basename "$0")"' {} \;

这给了我一堆(全屏)像这样的错误:

~>存档:./sun&sea/dugi_otok/970x250/SS4_970x250.zip
~>注意:文件名不匹配:./sun&sea/dugi_otok/970x250/SS4_970x250.zip

对于我的一生,我无法弄清楚这一点。

重新运行删除空格
如果我让它工作并且文件被解压缩,计划是从顶级目录banners/ 重新运行mv 命令,并再次用“_”替换空格。这会处理 .zip 文件的内容。

重新压缩
最后,我需要重新压缩这些新创建的子目录,命名为原始 .zip 文件,并覆盖现有的 .zip 文件(最初是解压缩的)。

基本上重新压缩这个:

~> banners/germany/active/dugi_otok/300x250/AC2_xx/(newly unzipped contents)

进入:

~> banners/germany/active/dugi_otok/300x250/AC2_xx.zip

对于造成的混乱,我深表歉意,但我找不到更好的方法来解释这一点。

【问题讨论】:

  • 为什么要添加标签[baseline]?

标签: macos shell zsh oh-my-zsh baseline


【解决方案1】:

basename 不会剥离扩展名,因此您的:

"$(dirname "$0")/$(basename "$0")"

只是重新创建$0。替换为:

"$(dirname "$0")/$(basename -s ".zip" "$0")"

basename-s 选项去除后缀

HTH

【讨论】:

    【解决方案2】:

    我现在需要将这些 .zip 文件解压缩到一个新的子目录中,同时 级别为 .zip 文件本身,与这些 .zip 命名相同 文件。

    unzip 选项 -d 适用于此:

    find . -name "*.zip" -exec sh -c 'unzip "$0" -d "${0%.zip}"' {} \; 
    

    在您尝试的命令中,unzip 的第二个参数被视为要从 zip 文件中提取的文件名,当然在其中找不到。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-26
      • 2013-12-29
      • 2020-07-10
      • 1970-01-01
      • 2017-02-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多