一、需求背景

由于业务需要,在特定的FTP下会不断的产生相关文件,大概每分钟一个文件,每天1500个上下。但是长期下去单个目录下文件数量就会太多,可能导致性能问题。所以现在想按照日期将文件分类,将同一天产生的文件放到以产生文件日期命名的目录下,比如所有在2017-01-01产生的文件都放在20170101目录下。

二、技术思路

可以定时遍历目标文件所在源目录,利用stat获取单个文件的时间信息,然后将其mv到以其时间信息为特征命名的目的目录中去。

1、定时执行脚本可利用Linux的cron。使用crontab -e来编辑其配置文件。

crontab配置格式如下:

f1 f2 f3 f4 f5 program

其中f1是表示分钟,f2表示小时,f3表示一个月份中的第几日,f4表示月份,f5表示一个星期中的第几天。program 表示要执行的程序。当f1为*时表示每分钟都要执行program,f2为*时表示每小时都要执行程序,其馀类推。

当 f1 为*时表示每分钟都要执行 program,f2为*时表示每小时都要执行程序,其馀类推。

当f1为a-b时表示从第a分钟到第b分钟这段时间内要执行,f2为a-b时表示从第a到第b小时都要执行,其馀类推。

当f1为*/n时表示每n分钟个时间间隔执行一次,f2为*/n表示每n小时个时间间隔执行一次,其馀类推。

当f1为 a, b, c,... 时表示第 a, b, c,...分钟要执行,f2 为a, b, c,... 时表示第 a, b, c...个小时要执行,其馀类推。

若想要脚本每分钟执行一次:

* * * * * script.sh

2、在Linux中,没有文件创建时间的概念。只有文件的访问时间、修改时间、状态改变时间。也就是说不能知道文件的创建时间。但如果文件创建后就没有修改过,修改时间=创建时间;如果文件创建后,状态就没有改变过,那么状态改变时间=创建时间;如果文件创建后,没有被读取过,那么访问时间=创建时间,这个基本不太可能。

由于源文件产生之后并不会被修改,故采用文件修改时间作为其产生时间。如下例中的Modify一行。

[liuhao@my test]$ stat sh.sh

File: "sh.sh"

Size: 524 Blocks: 8 IO Block: 4096 普通文件

Device: fd02h/64770d Inode: 168698107 Links: 1

Access: (0644/-rw-r--r--) Uid: ( 509/ liuhao) Gid: ( 0/ root)

Access: 2017-01-23 09:51:32.160824300 +0800

Modify: 2017-01-23 09:51:29.293824304 +0800

Change: 2017-01-23 09:51:29.294824304 +0800

3、利用awk处理stat得到的文件产生时间信息来得到目标文件目录名。

date=`stat $file | grep "Modify:" | awk -F ":| |-" '{print $3$4$5}'`

if [ ! -e $date ];then

mkdir $date

fi

三、代码实现

#! /bin/sh

rootDir="/home/liuhao/test/"

sDir=$rootDir

echo $sDir

cd $rootDir"/test"

touch ./.date

#Modify: 2017-01-23 09:31:37.228825682 +0800

dDir=`stat ./.date | grep "Modify:" | awk -F ":| |-" '{print $3$4$5}'`

echo $dDir

#现在看来,和dDir相关的都没用了

if [ ! -e $dDir ];then

mkdir $dDir

fi

for file in $rootDir/*

do

if [ -f $file ];then

date=`stat $file | grep "Modify:" | awk -F ":| |-" '{print $3$4$5}'`

if [ ! -e $date ];then

mkdir $date

fi

echo $file $date

mv $file $date

fi

done

linux 按日期复制文件夹,Linux 按文件日期分类文件相关推荐

  1. linux命令回退文件夹,Linux命令总结

    账号管理-注意:在管理员(root)的权限下使用 创建用户:useradd (选项) 用户名--useradd aaa 用户口令:passwd (选项) 用户名--passwd aaa 注意:设置密码 ...

  2. Linux之不删除指定文件夹,其他都删(文件和文件夹)

    例子1 查看当前文件夹下有哪些文件和子文件夹 我们看到俩个文件夹 和多个文件,我现在的需求是 只保留 public 这个文件夹 其他的文件夹和文件 统统都删除,怎么办呢? 只要一个命令 ls | gr ...

  3. linux 删除tmp文件夹,Linux下tmp文件夹的文件自动删除的问题(转)

    场景: 近日发现有一台机器tmp文件夹下放置的文件无辜丢失,而且排查发现是自动丢失,并且,只是删除10天之前的文件. 本来以为是哪位写了一个自动执行脚本, find了一下10天前的文件删除了. 结果, ...

  4. linux 新建1 10文件夹,linux创建目录和文件的命令

    linux下进行操作难免会遇到创建文件或者目录的情况,那么我们要使用什么目录来创建目录和文件呢?下面由学习啦小编为大家整理了linux创建目录和文件命令的相关知识,希望大家喜欢! 一.linux创建目 ...

  5. linux scp 过滤文件夹,linux中使用scp远程拷贝文件及文件夹

    linux中使用scp远程拷贝文件及文件夹 linux scp远程拷贝文件及文件夹,需要的朋友可以参考下 1.拷贝本机/home/wtf/test整个目录至远程主机192.168.100.1的/roo ...

  6. linux mkdir 文件夹,Linux mkdir 创建文件夹命令

    介绍: 该命令创建指定的目录名,要求创建目录的用户在当前目录中具有写权限,并且指定的目录名不能是当前目录中已有的目录 语法: mkdir [-m] [-p] 目录名 选项介绍: -m: 对新建目录设置 ...

  7. linux截图保存文件夹,linux 下截图工具(转)

    在Linux下很多软件使用命令就可以很好的操作,截图软件也不例外.刚好要截图使用一下,就找到了这款小巧的却很使用的Linux下的截图工具,就是scrot. 如何安装及使用? 1.安装篇很简单,想安装其 ...

  8. linux递归创建文件夹_Python中并发请求创建文件夹带来的线程安全问题

    在我们日常写程序的过程中,免不了与文件系统打交道,各种开发语言都提供了与文件系统交互的指令函数,比如Python中的os模块,就提供了许多这样的指令函数,今天就以创建文件夹为例,来说一下,如果用的不当 ...

  9. php linux 删除文件夹,linux下如何删除文件夹

    linux下删除文件夹的方法:可以使用[rm -rf 目录名]命令进行删除,如[rm -rf /var/log/httpd/access],表示删除/var/log/httpd/access目录及其下 ...

  10. linux下 java 压缩文件夹,java压缩文件夹linux下乱码问题

    前几天写了文章介绍java文件夹的压缩(见 http://zwllxs.iteye.com/blog/836483),但是发现一个问题,在linux下,如果文件夹内的文件是中文名,那么压缩后,这些文件 ...

最新文章

  1. 送出orkut邀请,当然如果需要gmail邀请,还有很多
  2. 每秒10W次高并发订单业务,你怎么实现?
  3. 转:Linux下安装Gtest/Gmock
  4. HTML JS正方形轮播,js,html一个页面里面多个页面轮播
  5. mysql不显示默认密码_免安装版mysql不出现默认密码状况(基于mysql8.0)
  6. ActiveMQ专题2: 持久化
  7. 世界银行开放数据目录:后宫数据集三千个,人生赢家就是你
  8. 黑马程序员--java基础加强之内省(IntroSpector)
  9. .NET回归 HTML----表单元素(1)和一些常用的标记
  10. 什么软件测试情侣头像,扫图查情侣头像软件
  11. 封装Win 10系统时封装工具报错,无法正常封装,封装失败
  12. windows下面刷新dns
  13. python pyhook_python使用pyHook.HookManager()返回来的event中,event.Time怎么转换成为datetime形式?...
  14. 正态性检验ks和sw区别_非参数检验思路总结,清晰理解就靠它了!
  15. 香蕉树上第十根芭蕉——深度好文-为什么要写博客
  16. python清屏幕_如何在python中清除屏幕?
  17. 开通了个人微信公众号:slbGTD,准备把GTD相关的内容写成一本书
  18. Linux clock子系统【3】-i2c控制器打开时钟的流程分析(devm_clk_get)(consumer侧)
  19. MySQL慢查询日志分析
  20. java list intersect_C#编程中两个List集合使用Intersect方法求交集

热门文章

  1. steam夏日促销用Python爬取排行榜上的游戏打折信息
  2. 再见,余!额!宝!!!
  3. el table 固定表头和首行_表头太太太复杂了,如何批量打印?简单!
  4. 天津大学计算机非全日制录取名单,天津大学法律硕士拟录取名单(非全日制).xls...
  5. UCI机器学习数据集
  6. Nucleic Acids Research | NONCODE数据库V6版发布,涵盖全面的动植物长非编码RNA注释
  7. ae画面颜色一键选取替换修改插件Composite Brush for Mac 1.5.2
  8. 使用 Python 解数学方程
  9. python可以实现的功能_Python 实现某个功能每隔一段时间被执行一次的功能方法...
  10. 文件件服务器,文件件服务器