有一个文件夹,其大小为2.4 Gb。
任务是通过SSH将此文件夹存档到多个独立的独立zip存档。
我试过了:
zip -r -s 512m archive.zip folder
此命令创建相关的zip-archives:
archive.z01
archive.z02
archive.z03
archive.z04
archive.zip
但我需要为"在线网络服务"创建完全独立的zip存档。这可以优化图像。此服务需要zip存档,大小最高为2Gb。
你能建议一个有效的解决方案吗?
操作系统:Linux
通过以下方式访问:SSH
感谢您的帮助。
答案 0 :(得分:0)
这是一个bash中的一个简短脚本,可以解决这个问题:
#!/bin/bash
FILES=`ls *.jpg`
ZIP_PREFIX='archive'
INDEX='1'
MAX_SIZE='512'
for PICT_FILE in $FILES
do
ZIP_NAME=${ZIP_PREFIX}"_"${INDEX}".zip"
ARCH_SIZE=`du -m $ZIP_NAME | cut -f 1`
if [ $ARCH_SIZE -ge $MAX_SIZE ]; then
INDEX=`echo "$INDEX + 1" | bc`
fi
ZIP_NAME=${ZIP_PREFIX}"_"${INDEX}".zip"
zip $ZIP_NAME $PICT_FILE
done
MAX_SIZE在Mb中设置
您可以在' FILES'中替换命令。使用find
或其他任何可以提供文件列表的内容
答案 1 :(得分:0)
the.Legend,谢谢你的剧本。
这里有一些注意事项:
<script type="text/javascript" src="<?=base_url()?>js/jquery-161.js"></script>
<script src="<?=base_url()?>js/jquery.min-2.0.2.js"></script>
<link href="<?=base_url()?>/css/select2.min.css" rel="stylesheet" />
<script src="<?=base_url()?>js/select2.min.js"></script>
对于大小小于1 Mb的文件,返回1。
1. `du -m $ZIP_NAME | cut -f 1`
在linux中使用bash不起作用。
这是在linux中测试的更新脚本:
2. INDEX=`echo "$INDEX + 1" | bc
结果是:
#!/bin/bash
FILES=`find ./image/`
ZIP_PREFIX='example.com.image'
INDEX='1'
MAX_SIZE='512000' # 512 Mb
for PICT_FILE in $FILES
do
ZIP_NAME=${ZIP_PREFIX}"_"${INDEX}".zip"
ARCH_SIZE=`du -k $ZIP_NAME | cut -f 1`
# echo $ARCH_SIZE
# echo $MAX_SIZE
if [ $ARCH_SIZE -ge $MAX_SIZE ]; then
INDEX=$((INDEX + 1))
fi
ZIP_NAME=${ZIP_PREFIX}"_"${INDEX}".zip"
zip $ZIP_NAME $PICT_FILE
done