解压到同名目录

Dat*_*ion 4 command-line bash unzip

我正在尝试解压缩 Google Takeout 提供的文件,并且需要一个命令将目录中的所有 zip 文件解压缩到与 zip 文件同名的目录以避免冲突。zip 名称无法预先确定,因此生成的解压缩目录也无法预先确定。

例如

-zipstore
----zipname1.zip
----zipname2.zip
Run Code Online (Sandbox Code Playgroud)

应该导致

-zipstore
----zipname1.zip
----zipname1
----zipname2.zip
----zipname2
Run Code Online (Sandbox Code Playgroud)

其中 zipname1 和 zipname2 是包含解压缩文件的目录。

进一步考虑的是如何在解压之前检测 zip 是否已完成下载 - 这些是 10Gb 文件!

Raf*_*ffa 7

AFAIK,unzip 本身不支持这一点,但它支持使用-d.

因此,为了提取单个档案,您可以定义自己的函数,利用 shell 的参数扩展来删除.zip文件名中的扩展部分,即:

myunzip () 
{ 
    unzip "$1" -d "${1%.zip}"
}
Run Code Online (Sandbox Code Playgroud)

...然后像这样使用它:

myunzip zipname1.zip
Run Code Online (Sandbox Code Playgroud)

或者使用 shell 循环一次性提取当前工作目录中的所有存档文件,如下所示:

myunzip zipname1.zip
Run Code Online (Sandbox Code Playgroud)

inotifywait但是,要持续监视某个下载目录并自动解压完成的 zip 存档文件下载,您需要使用例如其事件来对该目录设置监视close_write(等待存档文件完全下载并写入磁盘)。您可以在如下脚本中实现:

for a in *.zip; do unzip "$a" -d "${a%.zip}"; done
Run Code Online (Sandbox Code Playgroud)