如何动态搜索特定路径(例如:/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 文件的出现。