`

Linux zip小知识

阅读更多

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))
} 

 

3. 示例Shell

#!/bin/bash

. $(dirname $0)/datediff.sh

FILE_PATH="File"
EXCLUDE="File/tmp/\* File/20140505/\*"
FORMAT1="+%Y-%m-%d %H:%M:%S"
FORMAT2="+%Y%m%d%H%M"

start_time1=$(date "$FORMAT1")
start_time2=$(date "$FORMAT2")

backup_all() {
  echo "$start_time1 start backup all files"

  filename=$(get_filename "all" "$start_time2")
  zip -r "$filename" "$FILE_PATH"/* -x "$EXCLUDE"

  echo $(date "$FORMAT1") backup finished
}

backup_from() {
  echo "$start_time1 start backup files from $1"

  filename=$(get_filename $(date_format "$1") "$start_time2")
  min=$(date_diff "-m" "$1" "now")
  find "$FILE_PATH" -cmin -"$min" | zip -@ "$filename"
#  zip "$filename" -d "$EXCLUDE"

  echo $(date "$FORMAT1") backup finished
}

backup_range() {
  echo "$start_time1 start backup files from $1 to $2"
  
  filename=$(get_filename $(date_format "$1") $(date_format "$2"))
  min1=$(date_diff "-m" "$1" "now")
  min2=$(date_diff "-m" "$2" "now")
  find "$FILE_PATH" -cmin -"$min1" -cmin +$(($min2-1)) | zip -@ "$filename"
#  zip "$filename" -d "$EXCLUDE"

  echo $(date "$FORMAT1") backup finished
}

date_format () {
  date -d "$1" "$FORMAT2"
}

get_filename () {
  echo "File_$1_$2.zip" 
}

check_date () {
  flag=$(echo "$1" | grep -cE "(^[0-9]{4}-[0-9]{2}-[0-9]{2}$)|(^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}$)")
  if [ "$flag" -ne 1 ]; then
    echo "failure"
  fi
}

if [ "$#" -eq 2 ]; then
  flag1=$(check_date "$1")
  flag2=$(check_date "$2")
  if [ "x$flag1" = "x" ] && [ "x$flag2" = "x" ]; then
    backup_range "$1" "$2"
  else
    echo "Please input valid date"
  fi
  exit
fi

case "$1" in
  "-h"|"--help")
    echo "Usage: $0 {all|2016-11-11|'2016-11-11 11:11'|2016-11-11 '2016-11-13 23:59'}
    exit 1
    ;;  
  "all")
    backup_all
    ;;
  *)
    flag=$(check_date "$1")
    if [ "x$flag" = "x" ]; then
      backup_from "$1"
    else
      echo "Please input valid date"
    fi
    ;;
esac

  

Bash Guide for Beginners

分享到:
评论

相关推荐

    chromium-linux.zip

    "chromium-linux.zip" 是一个包含了 Chromium 浏览器针对 Linux 操作系统的源代码压缩包。Chromium 是 Google Chrome 浏览器的开源版本,它为开发者提供了浏览器的基础架构,以便进行定制和改进。这个压缩包主要是...

    Linux实验.zip

    在本Linux实验.zip文件中,包含了从实验1到实验7的系列内容,这些实验旨在帮助学习者深入理解和掌握Linux操作系统的基础知识与操作技巧。Linux作为一款开源、免费的类UNIX操作系统,广泛应用于服务器、嵌入式设备...

    Linux命令大全.zip

    "Linux命令大全.zip"这个压缩包文件显然是为那些想要学习或巩固Linux命令知识的人准备的。在这个文档中,我们将深入探讨Linux命令的核心概念,常用命令以及它们的应用场景。 Linux命令行界面,也被称为终端或Shell...

    csdn_linux.zip

    "csdn_linux.zip"这个压缩包文件显然包含了一系列与Linux学习相关的资源,可能是教程、代码示例、文档或者是其他的学习材料。让我们深入探讨一下Linux学习的一些关键知识点。 1. **Linux基础知识**:Linux是一种...

    Linux系统安装包.zip

    本压缩包“Linux系统安装包.zip”提供了一系列在Linux环境下常用的软件和工具,包括MySQL8.0数据库、nginx1.2 web服务器、Java Development Kit (JDK) 8以及redis5内存数据存储服务和xshell6终端模拟器。以下是这些...

    linux部署需要.zip

    "linux部署需要.zip"这个压缩包显然包含了进行Linux系统部署时可能会用到的各种工具和资源。下面,我们将深入探讨Linux部署的相关知识点。 1. **Linux发行版选择**:Linux有多种发行版,如Ubuntu、CentOS、Debian、...

    dnw-linux.zip

    标题“dnw-linux.zip”表明这可能是一个针对Linux操作系统的软件或工具包,可能是专为Ubuntu 19.04(Disco Dingo)版本设计的。Ubuntu是基于Debian的开源Linux发行版,以其用户友好性和丰富的软件库而闻名。19.04...

    linux进程的一切知识.zip

    linux进程的一切知识.zip 进程占用的内存空间布局,虚拟空间地址分布 进程启动的3种方式 监控子进程的状态 进程的终止 僵尸进程

    cobaltstrike-linux.zip

    标题 "cobaltstrike-linux.zip" 暗示了这是一个针对Linux系统的Cobalt Strike工具包。Cobalt Strike是一款广泛使用的网络安全评估工具,主要用于红队操作、渗透测试和模拟攻击,帮助安全专业人员评估组织的安全防护...

    CH341PAR_LINUX.ZIP

    《Linux USB驱动程序学习——基于CH341PAR_LINUX.ZIP》 在计算机硬件与操作系统交互的世界里,驱动程序扮演着至关重要的角色。本篇将深入探讨Linux环境下的USB驱动程序,特别是针对"CH341PAR_LINUX.ZIP"这个压缩包...

    Linux下c编程.zip

    这个名为“Linux下c编程.zip”的压缩包包含两份宝贵的资源:“Linux下c编程.pdf”和“Linux下的C编程实战.pdf”,它们为初学者提供了深入理解和实践Linux+C的宝贵材料。 首先,“Linux下c编程.pdf”可能涵盖了如何...

    10201_database_linux32.zip

    标题中的“10201_database_linux32.zip”表明这是一个与Oracle数据库相关的压缩文件,特别指出是针对Linux 32位系统的。Oracle数据库是世界上最流行的关系型数据库管理系统之一,尤其在企业级应用中广泛使用。这个...

    linux-Termux一键安装Linux脚本.zip

    Linux Termux 一键安装Linux脚本是为Android设备设计的一种...尽管可能存在一些挑战,但通过熟悉Termux和Linux基础知识,以及学习如何有效利用一键安装脚本,用户可以轻松地在Android设备上搭建和管理自己的Linux环境。

    Linux常用命令全集.zip

    CHM文件“Linux常用命令全集”可能包含了如下的主要知识点: 1. **文件与目录管理**: - `ls`:列出目录内容。 - `cd`:切换当前工作目录。 - `mkdir`:创建新目录。 - `rm`:删除文件或目录。 - `cp`:复制...

    linux_src.zip

    在“linux_src.zip”这个压缩包中,我们可以期待找到一系列关于Linux内核的深入分析和详细资料,特别是关于GPIO子系统、电源管理子系统以及文件系统的探讨。 GPIO(General Purpose Input/Output)子系统是Linux...

    Linux watchdog.zip

    这个"Linux watchdog.zip"文件包含了与Linux Watchdog相关的源码,特别是针对A8芯片优化的部分,这表明它可能是一个特定硬件平台的实现。 源码中的`Makefile`文件是构建工程的重要组成部分,用于指示编译器如何编译...

    Linux系统安装.zip|Linux系统安装.zip

    总之,Linux系统安装涉及多个层面,从前期的规划、硬件准备,到安装过程中的各种配置,再到后期的维护和优化,都需要一定的知识和实践。通过不断学习和尝试,你会发现Linux不仅是一个强大的操作系统,也是一个充满...

    obsidian linux zip

    总之,"obsidian linux zip"指的是在Linux系统上使用ZIP格式打包的Obsidian应用相关文件,主要涉及如何在Linux下解压ZIP文件,运行AppImage格式的应用,以及如何利用Obsidian进行知识管理和Markdown编写。...

    chromedriver_linux64.zip

    【标题】"chromedriver_linux64.zip" 是一个专为...通过上述知识点,我们可以理解"chromedriver_linux64.zip"文件在Selenium自动化测试中的关键作用,以及如何在Python环境下利用它来实现对Chrome浏览器的自动化控制。

    网上人写的LinuxOS.zip

    在"网上人写的LinuxOS.zip"这个压缩包中,包含了一些与Linux系统相关的资源,可能是教程、文档或者镜像文件。让我们逐一分析这些子文件: 1. **fairysky_0.01_20060612_153602.tar.gz** - 这个文件名暗示了一个早期...

Global site tag (gtag.js) - Google Analytics