Linux文件拷贝脚本
在工作中,我们经常遇到要从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文件拷贝脚本的更多相关文章
- Linux文件拷贝(6)
本篇介绍文件拷贝操作,主要讲两个命令: 命令 对应英文 作用 tree[目录名] tree 以树状图列出文件目录结构 cp 源文件 目标文件 copy 复制文件或者目录 tree tree命令可以将一 ...
- 【转】嵌入式Linux文件系统启动脚本及分析
原文网址:http://www.linuxidc.com/Linux/2011-03/33728.htm 在内核初始化完成后,嵌入式linux 文件系统的启动过程主要包含以下几个步骤: 1. 执行/s ...
- linux文件分发脚本
1.说明 此脚本可分发两类文件,1.固定内容文件,2.(每台被分发主机)内容不同的文件 ppp.sh为拨号脚本,每台被分发主机内容不同 根据分发文件名字不同(ppp.sh和其他文件)自动选择分发方式 ...
- linux文件归档脚本
#!/bin/bash range= dir="/app/xx/logs" bak_dir="/app/xx/logs_archive" cd $dir $ra ...
- 将文件从一台linux机器拷贝到多台的方法
首先你所操作的各台linux机器间必须设置了ssh免密码登录,具体方法可上网查看.将文件从一台linux机器拷贝到多台分为以下几个步骤: 第一步:创建脚本文件remotecopy.sh #!/bin/ ...
- linux下shell脚本执行jar文件
最近在搞一个shell脚本启动jar文件个关闭jar文件的东东.搞得我都蛋疼了.今天晚上终于弄好了 话说,小弟的linux只是刚入门,经过各方查资料终于搞定了.话不多说,下面开始上小弟写的shell脚 ...
- Linux系统下远程文件拷贝scp命令
在Linux系统下,不同机器上实现文件拷贝 一.将本地文件拷贝到远程机器: scp /home/administrator/news.txt root@192.168.6.129:/etc/squid ...
- windows python文件拷贝到linux上执行问题
之前在Windows下写好了一个Python脚本,运行没问题,今天在Linux下,脚本开头的注释行已经指明了解释器的路径,也用chmod给了执行权限,但就是不能直接运行脚本. 1 问题1: 报错:: ...
- linux执行sh脚本文件命令
linux执行sh脚本文件命令 很多时候需要多个命令来完成一项工作,而这个工作又常常是重复的,这个时候我们自然会想到将这些命令写成sh脚本,下次执行下这个脚本一切就都搞定了,下面就是发布代码的一个脚本 ...
随机推荐
- Java的虚拟线程(协程)特性开启预览阶段,多线程开发的难度将大大降低
高并发.多线程一直是Java编程中的难点,也是面试题中的要点.Java开发者也一直在尝试使用多线程来解决应用服务器的并发问题.但是多线程并不容易,为此一个新的技术出现了,这就是虚拟线程. 传统多线程的 ...
- Go xmas2020 学习笔记 05、Arrays, Slices, and Maps
05-Arrays, Slices, and Maps. In memory. Array. Slice. fence post error. Compare Array and Slice . Ma ...
- Solon 1.6.36 发布,更现代感的应用开发框架
相对于 Spring Boot 和 Spring Cloud 的项目 启动快 5 - 10 倍 qps 高 2- 3 倍 运行时内存节省 1/3 ~ 1/2 打包可以缩小到 1/2 ~ 1/10(比如 ...
- 【分享汇总】25个主题分享,360°领略OpenHarmony最新技术版图
2021年10月,开放原子开源基金会旗下开源项目 OpenAtom OpenHarmony (以下简称"OpenHarmony") 应邀参加华为2021 HDC 开发者大会,并组织 ...
- 2021.10.29 P1649 [USACO07OCT]Obstacle Course S(BFS)
2021.10.29 P1649 [USACO07OCT]Obstacle Course S(BFS) 题意: 给一张n*n的图,起点为A,终点为 B,求从A到B转弯次数最少为多少. 分析: 是否存在 ...
- Math内置对象 常用的方法
属性: Math.Pi 方法: Math.max() 最大值 Math.min() 最小值 Math.ceil() 向上取整 Math.floor() 向下取整 Math.random() ...
- 【Hadoop】9、Sqoop组件
目录 Sqoop组件安装与配置 1.使用xftp将软件包上传到/opt/software 2.部署sqoop(在master上执行) 3.启动sqoop集群(在master上执行) 4.连接hive配 ...
- vue实例vm的方法
import wbMessage from './wb-message' let Constructor = Vue.extend(wbMessage) let vm = new Constructo ...
- C++进阶-3-5-list容器
C++进阶-3-5-list容器 1 #include<iostream> 2 #include<list> 3 #include<algorithm> 4 usi ...
- 让服务调用更简单 - Caller.HttpClient
前言 绝大多数项目都离不开服务调用,服务的调用方式通常是基于Http.RPC协议的调用,需要获取到对应服务的域名或者ip地址以及详细的控制器方法后才能进行调用,如果项目需要支持分布式部署,则需要借助服 ...