Linux解压缩,提取和删除文件

时间:2017-10-27 12:05:42

标签: bash zip unzip

在Linux上使用zip我们可以:

zip -Rm "MyArchive" "*"

将每个文件移动到存档内以保存位置。有没有办法为unzip做同样的事情?

我有一个丑陋的主张。想象一下,我的txt

中有csvMyArchive.zip个文件
unzip "MyArchive.zip" "*.txt"
zip -d "MyArchive.zip" "*.txt"
unzip "MyArchive.zip" "*.csv"
zip -d "MyArchive.zip" "*.csv"

EDIT1:

zip -d会在运行时增加空间使用量,结束后会释放空间。想象一下,我已经从txt中提取了所有unzip "MyArchive.zip" "*.txt"个文件,此时我使用了80%的磁盘。当zip -d "MyArchive.zip" "*.txt"正在运行时,我达到了100%

  

zip I / O错误:设备上没有剩余空间

     

zip错误:输出文件写入失败(在zip文件上写入错误)

zip -d结束后,空间被释放,但我的txt个文件都没有从存档中删除,所以我回到80%使用的磁盘。回顾一下,zip -d非常慢,占用磁盘空间,如果失败则不会删除任何内容。

EDIT2:

这是我尝试过的 我在我的zip存档中读到,获取存档中的第一个文件。我unzip此特定文件,然后将其从原始存档中删除。并重复直到存档为空。

while :
do
    file="$(sed -n "1p" <<< "$(unzip -Z1 $MyArchive)")"
    if [ "$file" ];then
        unzip "$MyArchive" "$file"
        zip -d "$MyArchive" "$file"
    else
        break
    fi 
done

这一切都没有像我想象的那样发挥作用。为什么?因为zip -d正在创建一个临时文件来替换原始zip文件。慢而没用。

0 个答案:

没有答案