利用shell脚本或者php移动某个文件夹下的文件到各自的日期组成的目录下
背景是这样的:网站一开始访问量比较小,大家就把所有的图片文件上传到一个目录下(比如是/data/images/)。后来访问量大了,图片也多了,这样就影响读取效率。所以有个这样的需求,把这些个图片文件移动到多个目录下,这个目录是图片的上传日期(就是文件属性中的修改日期filemtime)组成的。比如2012-12-20的修改日期,那么现在就该放在/data/images/2012/12/20的目录下。
php有很容易的操作文件的函数,可以方便完成。当然也可以利用shell脚本完成。
程序思路:遍历这个文件夹/data/images,查出每个文件的修改日期,然后建立这个日期的文件夹,再把该文件移动到日期文件夹的下面。
查询修改日期的命令,有个stat,如下:可以找到Modify的日期

比如我要找到这个hehe.log的修改日期:2016-03-04 (取得第六行第二列)
# stat hehe.log | awk 'NR==6{print $2}'
接下来,我再把这个日期搞成这种格式,2016/03/04。
可以使用sed的替换命令;-F是分隔符;或在命令里写FS="-",但是必须要有BEGIN
# stat hehe.log | awk 'NR==6{print $2}' | sed 's/-/\//g'
# stat hehe.log | awk 'NR==6{print $2}' | awk -F - '{print $1"/"$2"/"$3}'
# stat hehe.log | awk 'NR==6{print $2}' | awk 'BEGIN{FS="-"}{print $1"/"$2"/"$3}'
得到这个日期了,shell脚本也就自然出来了:
#/bin/bash for file in ./*
do
if [[ -f $file ]]
then str=$(stat $file | awk 'NR==6{print $2}' | sed 's/-/\//g')
if [[ ! -d ${str} ]]
then mkdir -p ${str}
fi
mv $file $str
fi
done
顺便说下shell脚本的注意几点:[[ ]]这个判断命令,左右要留有空格。if下写then。$()是取执行结果赋给了变量。${}是取得这个变量的值。比如第7行的$str可以写成${str}。
做测试的时候,想再把新目录下的文件取回来还原。可以执行:find递归找出文件夹下的文件,然后移动到原来的目录下,-i是一行一行执行
# find . -type f | xargs -i mv {} .
下面利用php脚本实现:
<?php
function mvPic($dir) {
$opendir = opendir($dir);
while($file = readdir($opendir)) {
if($file != '.' && $file != '..') {
$date = date('Y/m/d', filemtime($file));// 取出文件修改日期,格式为2012/11/12
$fullpath = $dir. "/". $date;
if (!is_dir($fullpath)){
mkdir($fullpath, 0777, true);// true必须设置
}
rename($dir."/".$file, $fullpath."/".$file);// 移动文件
}
}
closedir($opendir);
}
$dir_name = "/data/images";
mvPic($dir_name);
利用shell脚本或者php移动某个文件夹下的文件到各自的日期组成的目录下的更多相关文章
- 将samba共享目录映射为本地文件夹(百度网盘直接下载到samba共享目录下)
将samba共享目录映射为本地文件夹(百度网盘直接下载到samba共享目录下) 前面淘了一个蜗牛星际的矿机,打算拿来做个个人云盘,就装上了Linux用smb把硬盘共享出来 访问倒是很爽,就是发现下东西 ...
- 利用shell脚本实现计划任务功能 V1.2
2013.05.10 mytask 1.2 主程序休眠时间分成若干小的时间片断分段休眠,避免长时间的休眠不能及时响应系统信号. 2013.05.07 mytask 1.1 昨天发布了mytask1. ...
- 利用shell脚本将Oracle服务器中数据定时增量刷新到ftp服务器中
现有需求:将oracle数据库中的数据准实时同步至某ftp服务器中,以便前端应用能定时从ftp服务器目录中取增量数据 方法:将加工脚本写为存储过程,然后利用shell脚本执行该存储过程并将增量数据导出 ...
- 利用shell脚本[带注释的]部署单节点多实例es集群(docker版)
文章目录 目录结构 install_docker_es.sh elasticsearch.yml.template 没事写写shell[我自己都不信,如果不是因为工作需要,我才不要写shell],努力 ...
- 利用shell脚本去备份幸运28源码搭建下载所指定的数据库
#! /bin/bash幸运28源码搭建下载Q[115288oo99]logintool=/home/yx/server/mysql/mysql/bin/mysqldumptool=/home/yx/ ...
- 利用shell脚本个性化运行jar任务
利用shell脚本可以个性化运行jar任务,废话不多说,直接上代码: #!/bin/bash APP_PATH=/root/bigdata/jars/data_migration_from_sqlse ...
- shell编程系列24--shell操作数据库实战之利用shell脚本将文本数据导入到mysql中
shell编程系列24--shell操作数据库实战之利用shell脚本将文本数据导入到mysql中 利用shell脚本将文本数据导入到mysql中 需求1:处理文本中的数据,将文本中的数据插入到mys ...
- shell脚本实现自动压缩一天前的日志文件 ,并传到ftp服务器上
shell脚本实现自动压缩一天前的日志文件 ,并传到ftp服务器上 naonao_127关注2人评论19401人阅读2012-06-08 11:26:16 生产环境下脚本自动备份脚本是 ...
- Shell 对整个文件夹中的文件进行MD5校验 [转]
查看本地文件的 MD5 命令:md5sum FileName查看home目录下所有文件的 MD5 码:cd ~find /home -type f -print0 | xargs -0 md5sum ...
随机推荐
- html常用标签整理
html文档结构 <!DOCTYPE html> <html lang="zh-CN"> #这个lang表示语言,zh-CN中文的意思,整个文档的内容以中文 ...
- 2018-02-17 中文代码示例[译]Scala中创建隐式函数
前言: 学习Scala时, 顺便翻译一下自己有兴趣的文章. 代码中所有命名都中文化了(不是翻译). 比如原文用的是甜甜圈的例子. 原文: Scala Tutorial - Learn How To C ...
- SD从零开始67-70 后勤信息系统中的标准分析, 信息结构, 信息的更新规则, 建立统计数据
SD从零开始67 后勤信息系统中的标准分析 标准分析中的报表Reporting in Standard Analyses 标准分析为高质量的表达和分析LIS中的数据基础提供了大量的功能: 当你决定了一 ...
- Oracle 11g数据库的创建
由于是自己自学Oracle,如果有问题,请大家指出,谢谢! Oracle提供了DBCA来创建数据库,对于初学者来说使用DBCA创建数据库简化了很多工作和设置,直接在交互界面即可实现所有的功能. 然而对 ...
- SVN SVN合并(Merge)与拉取分支(Branch/tag)操作简介
SVN合并(Merge)与拉取分支(Branch/tag)操作简介 合并(Merge) 例子:把对feature_branch\project_name_v3.3.7_branch的修改合并到deve ...
- Android常用数据类型转换
String转int.float.double.byte[].bitmap Int i = Integer.parseInt(str); Float f = Float.parseFloat(str) ...
- wap2app(三)-- 添加引导页
1.在client_index.html文件中添加如下代码: <script type="text/javascript"> if(window.plus){ plus ...
- mybatis学习系列五--插件及类型处理器
2 插件编写(80-81) 单个插件编写 2.1实现interceptor接口(ibatis) invocation.proceed()方法执行必须要有,否则不会无法实现拦截作用 2.2 使用@int ...
- 命令行选项 - Mozilla 产品与私有技术 | MDN - Google Chrome
命令行选项 在本文章中 语法规则 使用命令行选项 示例 用户配置档 -CreateProfile profile_name -CreateProfile "profile_name prof ...
- Python使用map,reduce高阶函数模拟实现Spark的reduceByKey算子功能
# 使用默认的高阶函数map和reduce import randomdef map_function(arg): # 生成测试数据 return (arg,1) list_map = list(m ...