日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux 按日期复制文件夹,Linux 按文件日期分类文件

發(fā)布時間:2025/3/15 linux 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux 按日期复制文件夹,Linux 按文件日期分类文件 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、需求背景

由于業(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。