递归解压缩文件,然后删除原始文件,从shell中保留解压缩的文件

Ben*_*Ben 9 bash rm unzip

到目前为止,我已经想出了如何使用find递归解压缩所有文件:

find . -depth -name `*.zip` -exec /usr/bin/unzip -n {} \; 
Run Code Online (Sandbox Code Playgroud)

但是,我无法弄清楚如何在提取后一次删除一个zip文件.在-a -exec中添加rm*.zip会在提取之前删除每个目录中的大多数zip文件.通过包含rm命令的脚本(使用-i启用测试)管道导致找不到任何*.zips(或者至少是它所抱怨的).当然,在许多文件名中都有空格,但此时在sed命令中添加_的语法有点超出我的意思.谢谢您帮忙!

ggi*_*oux 11

你有没有尝试过:

find . -depth -name '*.zip' -exec /usr/bin/unzip -n {} \; -exec rm {} \;
Run Code Online (Sandbox Code Playgroud)

要么

find . -depth -name '*.zip' -exec /usr/bin/unzip -n {} \; -delete
Run Code Online (Sandbox Code Playgroud)

解压后运行第二个查找

find . -depth -name '*.zip' -exec rm {} \;   
Run Code Online (Sandbox Code Playgroud)

  • -1 警告此命令会将所有 zip 解压缩到您的工作目录中。如果拉链留在找到它们的路径上会更好。 (2认同)

小智 8

thx用于-delete的第二个命令!帮助了我很多..只有2个(可能是有用的)来自我方的评论:

- 在我的debian系统上使用' .zip'而不是` .zip`

-use -execdir而不是-exec >这将提取其当前文件夹中的每个zip文件,否则您最终会调用您调用find cmd的目录中的所有提取内容.

找 .-depth -name'*.zip' -execdir/usr/bin/unzip -n {} \; -删除

THX&Regards,Nord


Joh*_* D. 5

如上所述,这应该有效。

寻找 。-深度-名称'*.zip' -execdir unzip -n {} \; -删除

但是,请注意两件事:

  • -n选项指示 unzip 不覆盖现有文件。您可能不知道 zip 文件是否与名称相似的目标文件不同。即便如此,-delete仍会删除 zip 文件。
  • 如果 unzip 无法解压缩文件(例如由于错误),它仍然可能会删除它。如果-exec rm {} \;该命令肯定会删除它 用于代替-delete

更安全的解决方案可能是将解压缩后的文件移动到一个单独的目录,当您确定已成功提取所有文件时,您可以将其丢弃。