HKC / Linux / synology · 2024年 7月 16日 0

将指定目录下 近30天的文件及文件夹 转移到 其他目录中

find 命令是用于在文件系统中查找文件和目录的强大工具。
基本语法
find [起始目录] [选项] [表达式]
起始目录:指定开始搜索的位置。如果未指定,默认从当前工作目录开始搜索。
常见选项
  • -name :按照文件名查找,支持通配符,如 find / -name "*.txt" 查找根目录下所有扩展名为 .txt 的文件。
  • -type :按照文件类型查找,如 d 表示目录,f 表示普通文件。例如 find /home -type d 查找 /home 目录下的所有目录。
  • -size :按照文件大小查找,例如 find / -size +100M 查找大于 100MB 的文件。
  • -mtime :按照文件修改时间查找,如 find / -mtime -7 查找 7 天内修改过的文件。
  • -user :按照文件所有者查找。
  • -group :按照文件所属组查找。
表达式
可以使用逻辑运算符组合多个条件,如 -and(可简写为 -a)表示与, -or (可简写为 -o)表示或,! 表示非。
例如:find / -size +100M -and -name "*.jpg" 查找根目录下大于 100MB 且扩展名为 .jpg 的文件。
find 命令的功能非常丰富,还可以结合 exec 选项对找到的文件执行其他操作,如删除、复制等。
-mtime参数说明

-mtime 0 表示文件修改时间距离当前为0天的文件,即距离当前时间不到1天(24小时)以内的文件。
-mtime 1 表示文件修改时间距离当前为1天的文件,即距离当前时间1天(24小时-48小时)的文件。
-mtime +1 表示文件修改时间为大于1天的文件,即距离当前时间2天(48小时)之外的文件
-mtime -1 表示文件修改时间为小于1天的文件,即距离当前时间1天(24小时)之内的文件
-ctime 表示是文件的变更时间(change time),即文件本身的状态(如权限、所属组、位置等)最后被变更的时间。变更文件状态的操作可以是 chmod(修改权限)、chgrp(修改所属组)、mv(移动或重命名文件)等。

例1:从 /volume1/test 目录中拷贝近一个月的文件到 /volume1/test1 中 (只拷贝文件,不考虑文件目录)

find /volume1/test -type f -mtime -30 -exec cp {} /tmp/demo3 \;

例2:从  /volume1/test  目录中拷贝近一个月的文件到  /volume1/test1  中 (保留文件目录结构,相当于整体拷贝过去)

find /volume1/test/* -type d -mtime -30 -exec cp -a {} /volume1/test1 \;

注意,这里的时间是 操作时间(-mtime), 如果逻辑上有问题的 可以用 文件的 文件属性被修改的时间 (-ctime 文件的权限被修改了, 这个时间也是会更新的)来判断

find /volume1/test/* -type d -mtime -30 -exec cp -a {} /volume1/test1 \;

修改mtime 时间的命令:touch -d ‘2020-01-01 10:00:00’ filename

000021.png

例3:从  /volume1/test  目录中转移一个月前的文件到  /volume1/test1  中 (保留文件目录结构,相当于整体拷贝过去)

find /volume1/test/* -mtime +30 -exec mv {} /volume1/test1/ \;

 

赞赏

微信赞赏支付宝赞赏