动态搜索特定路径中的 zip 文件并将其解压缩到与解压缩文件相同的文件夹中?

动态搜索特定路径中的 zip 文件并将其解压缩到与解压缩文件相同的文件夹中?

如何动态搜索特定路径(例如:/opt/uploading/"*"/multiple .zip文件)中的 zip 文件并将其解压缩到与 zip 文件相同的文件夹中?

下面的功能是解压多个zip文件并删除zip文件。但我希望 zip 文件与解压缩文件一起存在。

while true; do
   find -iname '*.zip' > zipindex
   test -s zipindex || break
   for zip in $(cat zipindex); do unzip -o $zip && rm $zip; done
done

答案1

嗯,rm $zip正在删除 .Zip 文件,因此将其删除。

答案2

这比 while 循环更适合 for 循环。通过这种方式,您还可以摆脱不必要的结果保存find -iname '*.zip' > zipindex

做这样的事情:

#!/bin/bash

for zip in $(find -iname '*.zip'); do
    unzip -o $zip
done

这将迭代所有找到产生的行。

当然,您应该完全放弃 bash 脚本并创建一个 find oneliner,如下所示:

find -iname '*.zip' -execdir unzip {} \;

编辑:感谢@don_crissti 和@ilkkachu,我已经成功地摆脱了在-exec 中调用shell 的另一个实例。 -execdir 很高兴知道!

答案3

使用 GNU Parallel 你可以这样做:

find my_dir | grep -E '\.zip$' | parallel unzip
inotifywait -qmre MOVED_TO -e CLOSE_WRITE --format %w%f my_dir | grep  -E '\.zip$' | parallel -u unzip

这样您就不需要忙着等待下一个 zip 文件的出现。

相关内容