Marco Nie - find 2019-12-20T10:15:00+08:00 Typecho https://blog.niekun.net/feed/atom/tag/find/ <![CDATA[Linux 自动删除指定天数前文件]]> https://blog.niekun.net/archives/832.html 2019-12-20T10:15:00+08:00 2019-12-20T10:15:00+08:00 admin https://niekun.net 服务器上搭建了个云盘,有个 temp 目录存放一些临时文件,想要设定指定天数后自动删除,可以使用 Linux 脚本实现。

用到的命令:
find mtime crontab

基本思路是使用 find 命令筛选符合条件的文件或文件夹,使用 crontab 创建定时任务。

find 的详细用法:https://niekun.net/index.php/archives/543.html
crontab 的详细用法:https://niekun.net/index.php/archives/461.html

指定删除 /temp 目录下超过 3 天的文件,新建脚本 timerRemove.sh 内容如下:

LOCALDIR="/temp/"
LOCALAGE="3"
cd ${LOCALDIR} || exit

find ${LOCALDIR}* -mtime +${LOCALAGE} -exec rm -rf {} \;

在 crontab 配置文件内修改如下,每 2 小时执行一次脚本:

SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/root

0  */2  *  *  * root bash /path/to/timerRemove.sh
]]>
<![CDATA[Linux 查询程序或文件位置 which/find/locate]]> https://blog.niekun.net/archives/543.html 2019-11-26T11:42:00+08:00 2019-11-26T11:42:00+08:00 admin https://niekun.net 经常忘记将一些文件放在什么,或者安装一个应用程序后不知道准确的安装路径。使用命令可以进行查询:

which

which python

which 命令可用来查询 app 安装位置,返回值为路径。

find

find / -name file -type f

斜线:/ 代表从系统根目录查找,也可以定义特定的目录开始搜索
-name:代表只找文件名匹配,不找文件内的字符串
-iname:代表文件名不区分大小写
-type:搜索的文件类型 f 代表只找文件不找文件夹匹配,l 代表软链接文件
-mtime:指定查找日期天数
-exec:查找后执行 command 命令,注意最后要有分号 ;

例如,查找指定目录三天前的文件,然后删除文件:

find /temp/* -mtime +2 -exec rm -rf {} \;

-mtime 使用加号 + 代表指定日期前查找,减号 - 代表指定日期内查找。查找天数为取整关系,例如 2.5 天前的文件会被包含在 -mtime -2 内而不在 -mtime +2 内。

-exec 指令后跟需要执行的命令。

查询已知文件名的文件的所有位置,find 命令直接从文件系统 filesystem 查找文件,速度可能会比较慢,但优点是找到的文件当前肯定在系统内。

locate

locate 用来根据文件名寻找文件,它和 find 命令不同点是,find 从当前文件系统直接查找匹配,而 locate 命令会有一个背景进程,记录当前所有文件名到一个数据库文件中,当新建或删除一个文件时会动态更新这个数据库。当使用 locate 命令查找文件时,会从这个数据库里查找,这样速度会相比 find 快很多。

语法:

locate [option] strFile

strFile:将匹配所有包含此字符串的文件

option:
-i:不区分大小写
-c:输出匹配到的文件的个数

对于一些刚刚建立的文件,可能数据库没有更新到,所以无法通过命令查找到,这时候可以手动更新数据库:

sudo updatedb
]]>