linux 按日期复制文件夹,Linux 按文件日期分类文件
一、需求背景
由于業(yè)務(wù)需要,在特定的FTP下會不斷的產(chǎn)生相關(guān)文件,大概每分鐘一個文件,每天1500個上下。但是長期下去單個目錄下文件數(shù)量就會太多,可能導(dǎo)致性能問題。所以現(xiàn)在想按照日期將文件分類,將同一天產(chǎn)生的文件放到以產(chǎn)生文件日期命名的目錄下,比如所有在2017-01-01產(chǎn)生的文件都放在20170101目錄下。
二、技術(shù)思路
可以定時遍歷目標(biāo)文件所在源目錄,利用stat獲取單個文件的時間信息,然后將其mv到以其時間信息為特征命名的目的目錄中去。
1、定時執(zhí)行腳本可利用Linux的cron。使用crontab -e來編輯其配置文件。
crontab配置格式如下:
f1 f2 f3 f4 f5 program
其中f1是表示分鐘,f2表示小時,f3表示一個月份中的第幾日,f4表示月份,f5表示一個星期中的第幾天。program 表示要執(zhí)行的程序。當(dāng)f1為*時表示每分鐘都要執(zhí)行program,f2為*時表示每小時都要執(zhí)行程序,其馀類推。
當(dāng) f1 為*時表示每分鐘都要執(zhí)行 program,f2為*時表示每小時都要執(zhí)行程序,其馀類推。
當(dāng)f1為a-b時表示從第a分鐘到第b分鐘這段時間內(nèi)要執(zhí)行,f2為a-b時表示從第a到第b小時都要執(zhí)行,其馀類推。
當(dāng)f1為*/n時表示每n分鐘個時間間隔執(zhí)行一次,f2為*/n表示每n小時個時間間隔執(zhí)行一次,其馀類推。
當(dāng)f1為 a, b, c,... 時表示第 a, b, c,...分鐘要執(zhí)行,f2 為a, b, c,... 時表示第 a, b, c...個小時要執(zhí)行,其馀類推。
若想要腳本每分鐘執(zhí)行一次:
* * * * * script.sh
2、在Linux中,沒有文件創(chuàng)建時間的概念。只有文件的訪問時間、修改時間、狀態(tài)改變時間。也就是說不能知道文件的創(chuàng)建時間。但如果文件創(chuàng)建后就沒有修改過,修改時間=創(chuàng)建時間;如果文件創(chuàng)建后,狀態(tài)就沒有改變過,那么狀態(tài)改變時間=創(chuàng)建時間;如果文件創(chuàng)建后,沒有被讀取過,那么訪問時間=創(chuàng)建時間,這個基本不太可能。
由于源文件產(chǎn)生之后并不會被修改,故采用文件修改時間作為其產(chǎn)生時間。如下例中的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得到的文件產(chǎn)生時間信息來得到目標(biāo)文件目錄名。
date=`stat $file | grep "Modify:" | awk -F ":| |-" '{print $3$4$5}'`
if [ ! -e $date ];then
mkdir $date
fi
三、代碼實(shí)現(xiàn)
#! /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
#現(xiàn)在看來,和dDir相關(guān)的都沒用了
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
總結(jié)
以上是生活随笔為你收集整理的linux 按日期复制文件夹,Linux 按文件日期分类文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机主机名称命令,怎么用dos指令修改
- 下一篇: 程序基础:数据结构(郝斌讲解)(4)