在Linux上使用zip
我们可以:
zip -Rm "MyArchive" "*"
将每个文件移动到存档内以保存位置。有没有办法为unzip
做同样的事情?
我有一个丑陋的主张。想象一下,我的txt
csv
和MyArchive.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文件。慢而没用。