1. zip如何排除文件夹
zip -r jason.zip jason/* -x jason/backports-4.4.2-1/\*
以上命令打包jason文件夹,排除其中的backports-4.4.2-1文件夹
如果改成这样:
zip -r jason.zip jason/* -x jason/backports-4.4.2-1\*
会排除其中以backports-4.4.2-1开头的文件和文件夹,比如jason下还有文件backports-4.4.2-1.tar.gz,也会被排除。
那这样呢?
zip -r jason.zip jason/* -x jason/backports-4.4.2-1/**\*
会排除backports-4.4.2-1目录下的所有文件和文件夹,backports-4.4.2-1目录保留
zip -r jason.zip jason/* -x jason/backports-4.4.2-1/*
这样只排除backports-4.4.2-1目录下的文件了
2. zip打包指定时间内的文件
zip支持-t(--from-date mmddyyyy), -tt(--before-date mmddyyyy)参数,可以根据mtime打包文件。"yyyy-mm-dd"格式也支持。
zip -rt 2016-11-11 jason.zip jason
那要根据ctime,atime呢,只能借助find了,使用find的优点是支持更精确的时间。
CentOS 7 find支持-newerXY参数,如根据ctime则为-newerct,可以查找ctime比指定时间新的文件。
find jason -newerct "2016-11-11 11:11:11" | zip -@ jason.zip
CentOS 6 find不支持-newerXY,只能使用参数-ctime,-atime/-cmin,-amin, 只是要计算一下时间,稍麻烦点。
find jason -cmin -100 | zip -@ jason.zip
可以通过以下的dateDiff function计算时间,比如:
min=$(date_diff "-m" "now" "2016-11-11 11:11")
#!/bin/bash date2stamp () { date -d "$1" +%s } dateDiff () { case "$1" in "-s") sec=1 shift ;; "-m") sec=60 shift ;; "-h") sec=3600 shift ;; "-d") sec=86400 shift ;; *) sec=86400 ;; esac date1=$(date2stamp "$1") date2=$(date2stamp "$2") diffSec=$((date2-date1)) if [ "$diffSec" -lt 0 ]; then abs=-1 else abs=1 fi # 通过echo返回值 echo $((diffSec/sec*abs)) }