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脚本,下次执行下这个脚本一切就都搞定了,下面就是发布代码的一个脚本 ...
随机推荐
- phpshe xml注入
*php商城系统 xml注入* **页面样式* *Xml原理参考:* https://www.cnblogs.com/20175211lyz/p/11413335.html *漏洞函数simplexm ...
- SpringMVC-拦截器快速入门
1.创建拦截器类实现HandlerInterceptor //该拦截器类必须实现HandlerInterceptor接口,手动覆盖其中的方法 public class MyInterceptor1 i ...
- cat /proc/cpuinfo 讲解
查看cpu信息有什么用呢,我们来看看到底有哪些用处:1.和云服务提供商核算成本,现在基本是cpu和内存的费用最大,硬盘大小几乎被忽略了2.我们写程序时候是会关注多核还是单核的,否则不能充分利用多线程等 ...
- mosquitto使用与常用配置
为了方便演示,我这里就用windows环境下安装的mosquitto进行操作,操作方式和linux系统下是一样的. 一.windows安装mosquitto 下载mosquitto mosquitto ...
- FastDFS分布式的文件系统从小白入门到企业实践打怪之路系列笔记 【运维实践】
描述: FastDFS 是阿里的余庆大佬用 C 语言编写的一款开源的分布式文件系统(个人项目),它对文件进行管理.功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,适合中小文件(4KB ...
- Java-NIO之Channel(通道)
1:Channel是什么 通道表示与实体的开放连接,例如硬件设备.文件.网络套接字或能够执行一个或多个不同 I/O 操作(例如读取或写入)的程序组件. 1.1:Channel与Stream的对比 St ...
- 【直播回顾】OpenHarmony知识赋能第四期第四课——音频驱动开发
3月31日晚上19点,知识赋能第四期直播的第四节,也是本期最后一节直播课<OpenHarmony标准系统HDF框架之音频驱动开发>,在OpenHarmony开发者成长计划社群内成功举办 ...
- 判断是否微信,qq等登陆。进去不同的页面下载
<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>安 ...
- 2021.07.17 P4170 染色(区间DP)
2021.07.17 P4170 染色(区间DP) [P4170 CQOI2007]涂色 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.目标状态可以由哪些状态转移过来. ...
- 应用程序application和库工程library之间的切换
知识点: Application作为应用程序启动:apply plugin: 'com.android.application' Library作为库工程被引用: apply plugin: 'com ...