在工作中,我们经常遇到要从Linux服务器拷贝日志至本地或者定期清理日志的需求,在服务器上,大型系统的日志是按模块存储的,这就导致日志的文件目录较多且层级不统一。我们从众多的目录手工筛选要下载或者删除的文件就非常耗时且low。对于这种需求,我研究了一下shell脚本的实现,现将可用的shell脚本分享如下:

1、模拟多层级logs环境

[root@localhost ~]# cd /home/
[root@localhost ~]# mkdir -p logs/fo
[root@localhost ~]# mkdir -p logs/fc/2022-02-31
[root@localhost ~]# mkdir -p logs/gl
[root@localhost ~]# mkdir -p logs/gt
[root@localhost ~]# touch logs/all.log
[root@localhost ~]# touch logs/error.log
[root@localhost ~]# touch logs/info.log
[root@localhost ~]# touch logs/gt/all.log
[root@localhost ~]# touch logs/gt/error.log
[root@localhost ~]# touch logs/gt/info.log
[root@localhost ~]# touch logs/gl/all.log
[root@localhost ~]# touch logs/gl/error.log
[root@localhost ~]# touch logs/gl/info.log
[root@localhost ~]# touch logs/fo/all.log
[root@localhost ~]# touch logs/fo/error.log
[root@localhost ~]# touch logs/fo/info.log
[root@localhost ~]# touch logs/fc/all.log
[root@localhost ~]# touch logs/fc/error.log
[root@localhost ~]# touch logs/fc/info.log
[root@localhost ~]# touch logs/fc/2022-02-31/all.log
[root@localhost ~]# touch logs/fc/2022-02-31/error.log
[root@localhost ~]# touch logs/fc/2022-02-31/info.log
  • 方便期间, 编写一个脚本来创建
cd /home/
mkdir -p logs/fo
mkdir -p logs/fc/2022-02-31
mkdir -p logs/gl
mkdir -p logs/gt
touch logs/all.log
touch logs/error.log
touch logs/info.log
touch logs/gt/all.log
touch logs/gt/error.log
touch logs/gt/info.log
touch logs/gl/all.log
touch logs/gl/error.log
touch logs/gl/info.log
touch logs/fo/all.log
touch logs/fo/error.log
touch logs/fo/info.log
touch logs/fc/all.log
touch logs/fc/error.log
touch logs/fc/info.log
touch logs/fc/2022-02-31/all.log
touch logs/fc/2022-02-31/error.log
touch logs/fc/2022-02-31/info.log
  • 环境结构如下图

2、以拷贝文件为例,脚本解析

  • -maxdepth 1 文件目录级次,1代表当前目录
  • -mtime -5 修改日期
    • -mtime n 按照文件的更改时间来找文件,n为整数。
    • n 表示文件更改时间距离为n天
    • -n 表示文件更改时间距离在n天以内
    • +n 表示文件更改时间距离在n天以前
  • -type f 查找文件而非文件夹
#/bin/bash
# 日志存储路径
logsname=/home
# 日志筛选后存放的路径
newdir=/data
# 基于日志存储路径(logsname)的日志存放路径
logname=logs
# 进入到日志存储路径下
cd $logsname
# 目录重建函数,与原日志存储路径一致,只不过上层路径发生了变化
function mkdir_fun(){
## 判断文件夹是否不存在(! 代表取反)
if [ ! -d $newdir"/"$1"/"$dirname ]
then
mkdir -p $newdir"/"$dirname #在新的路径下创建日志目录
else
echo $newdir"/"$dirname"已存在!"
fi
cpfile_fun $dirname $newdir # 调用文件拷贝函数
}
# 文件拷贝函数
function cpfile_fun(){
# 查找 $dirname 当前目录下,5天内修改的文件,查到后拷贝到新建的目录中
find $dirname -maxdepth 1 -mtime -5 -type f | xargs -i cp {} $newdir"/"$dirname
}
# 循环遍历日志
function read_dir(){
for dirname in `find $logname -type d -mtime -5`
do
if [ -d $1"/"$dirname ]
then
read_dir $1"/"$dirname
else
echo "1_"$dirname
mkdir_fun $dirname
#cpfile_fun $dirname
fi
done
}
# 调用循环遍历日志函数
read_dir
  • 执行前

  • 执行后

Linux文件拷贝脚本的更多相关文章

  1. Linux文件拷贝(6)

    本篇介绍文件拷贝操作,主要讲两个命令: 命令 对应英文 作用 tree[目录名] tree 以树状图列出文件目录结构 cp 源文件 目标文件 copy 复制文件或者目录 tree tree命令可以将一 ...

  2. 【转】嵌入式Linux文件系统启动脚本及分析

    原文网址:http://www.linuxidc.com/Linux/2011-03/33728.htm 在内核初始化完成后,嵌入式linux 文件系统的启动过程主要包含以下几个步骤: 1. 执行/s ...

  3. linux文件分发脚本

    1.说明 此脚本可分发两类文件,1.固定内容文件,2.(每台被分发主机)内容不同的文件 ppp.sh为拨号脚本,每台被分发主机内容不同 根据分发文件名字不同(ppp.sh和其他文件)自动选择分发方式 ...

  4. linux文件归档脚本

    #!/bin/bash range= dir="/app/xx/logs" bak_dir="/app/xx/logs_archive" cd $dir $ra ...

  5. 将文件从一台linux机器拷贝到多台的方法

    首先你所操作的各台linux机器间必须设置了ssh免密码登录,具体方法可上网查看.将文件从一台linux机器拷贝到多台分为以下几个步骤: 第一步:创建脚本文件remotecopy.sh #!/bin/ ...

  6. linux下shell脚本执行jar文件

    最近在搞一个shell脚本启动jar文件个关闭jar文件的东东.搞得我都蛋疼了.今天晚上终于弄好了 话说,小弟的linux只是刚入门,经过各方查资料终于搞定了.话不多说,下面开始上小弟写的shell脚 ...

  7. Linux系统下远程文件拷贝scp命令

    在Linux系统下,不同机器上实现文件拷贝 一.将本地文件拷贝到远程机器: scp /home/administrator/news.txt root@192.168.6.129:/etc/squid ...

  8. windows python文件拷贝到linux上执行问题

    之前在Windows下写好了一个Python脚本,运行没问题,今天在Linux下,脚本开头的注释行已经指明了解释器的路径,也用chmod给了执行权限,但就是不能直接运行脚本. 1 问题1: 报错:: ...

  9. linux执行sh脚本文件命令

    linux执行sh脚本文件命令 很多时候需要多个命令来完成一项工作,而这个工作又常常是重复的,这个时候我们自然会想到将这些命令写成sh脚本,下次执行下这个脚本一切就都搞定了,下面就是发布代码的一个脚本 ...

随机推荐

  1. 使用mockjs模拟后端返回的json数据;

    前后端分离开发中最重要的一部就是前后端联调,很多时候后端进度是跟不上前端的,所以需要前端模拟一些数据进行调试,这样前端的进度就可以加快了.后端的小哥哥别打我: 使用mockjs可以很方便的模拟出想要的 ...

  2. Mybatis个人笔记

    Mybatis 简介 官网地址:mybatis – MyBatis 3 | 简介 MyBatis 是一款优秀的持久层框架,它支持自定义 SQL.存储过程以及高级映射.MyBatis 免除了几乎所有的 ...

  3. 【分享汇总】25个主题分享,360°领略OpenHarmony最新技术版图

    2021年10月,开放原子开源基金会旗下开源项目 OpenAtom OpenHarmony (以下简称"OpenHarmony") 应邀参加华为2021 HDC 开发者大会,并组织 ...

  4. Spring Authorization Server授权服务器入门

    11月8日Spring官方已经强烈建议使用Spring Authorization Server替换已经过时的Spring Security OAuth2.0,距离Spring Security OA ...

  5. 2021.07.19 P2624 明明的烦恼(prufer序列,为什么杨辉三角我没搞出来?)

    2021.07.19 P2624 明明的烦恼(prufer序列,为什么杨辉三角我没搞出来?) [P2624 HNOI2008]明明的烦恼 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn ...

  6. CoAP调试工具 Mozi.IoT.CoAP

    前言 CoAP是一种类HTTP协议的物联网专用协议,其数据包为人类不可阅读的字节流形式,在开发相关应用的时候往往不能准确的了解数据包的内容.故需要专用的调试工具对数据和通讯进行调试. CoAP协议介绍 ...

  7. 想要白嫖ppt?记住这几个网站就够了

    良心ppt,超赞! [PPT]:OfficePlushttps://www.officeplus.cn/Template/Home.shtml稻壳Docerhttps://www.docer.com/ ...

  8. 记一次 PHP 省市县三级联动 数据库取值

    /** * Notes:省市县三级联动 * Created by depressiom * Date: 2022年4月14日 */ public function getCityData(){ //获 ...

  9. [STL] deque 双端队列

  10. ONNXRuntime学习笔记(三)

    接上一篇完成的pytorch模型训练结果,模型结构为ResNet18+fc,参数量约为11M,最终测试集Acc达到94.83%.接下来有分两个部分:导出onnx和使用onnxruntime推理. 一. ...