【运维】【ubuntu】递归 | 搜索 | find

【0】find 命令

-path: 指定要搜索的起始路径。可以是目录路径、文件路径或通配符。
-name pattern: 根据文件/目录名模式进行匹配搜索。
-iname pattern: 根据文件/目录名模式进行不区分大小写的匹配搜索。
-type type: 指定要搜索的文件类型,如 f 表示普通文件,d 表示目录,l 表示符号链接等。
-mtime n: 根据文件的修改时间进行搜索,n 表示多少天之前的修改时间。
-atime n: 根据访问时间查找文件,n 表示多少天之前的访问时间。
-ctime n: 根据文件状态更改时间查找文件,n 表示多少天之前的状态更改时间。
-newer file: 查找比指定文件更新的文件。
-size n: 根据文件大小进行搜索,n 表示文件大小。
-size +n: 查找大于 n 字节的文件。
-size -n: 查找小于 n 字节的文件。
-user user: 根据所有者用户名进行搜索。
-group group: 根据所属组名进行搜索。
-perm permissions: 根据文件权限进行搜索,如 -perm 644 表示查找权限为 644 的文件。
-exec command {} +: 对搜索到的文件执行指定的命令。
-print: 将搜索结果打印到标准输出
-maxdepth n: 限制递归的最大深度,即最多搜索多少层子目录。
-mindepth n: 指定搜索的最小深度,即从哪一层开始搜索。
-empty: 查找空文件或空目录。
-not: 反转前面给定的条件。
-regex pattern: 根据正则表达式进行文件名匹配。
-execdir command {} +: 在搜索到的文件所在的目录中执行指定的命令。
-exec command {} \;: 对搜索到的每个文件执行指定的命令,每个文件都会单独执行一次命令。
-prune: 在搜索过程中排除指定的目录。
-follow: 跟随符号链接进行搜索。
-mount: 只在指定的文件系统中搜索。

【1】递归搜索文件,搜索结果按时间排序

find . -name 'target.mp4' -type f -printf '%T+ %p\n' 2>/dev/null | sort -r
  • 从当前目录开始递归查找所有名为 target.mp4 的文件。
  • -printf 标志打印文件的时间戳和路径。
  • 2>/dev/null 将所有错误输出重定向到空设备,避免不必要的错误消息干扰。
  • sort -r 按时间戳倒序排序结果。

【2】递归搜索文件,搜索结果保存到指定目录(保留文件的目录结构)

find /src -type f -name "target.mp4" | xargs -I {} cp --parents {} /dst

【3】递归搜索大于10 MB 的文件,搜索结果按大小排序

find /cc -type f -size +10M -exec ls -lh {} \; | awk '{ print $5 " " $NF }' | sort -hr | grep .log

【4】递归删除目录

查询符合条件的目录

find /data -name 'cache' -type d -maxdepth 2 -printf '%T+ %p\n' 2>/dev/null | sort -r
import shutil

ds = [
	"/data/a@b.com/cache",
	"/data/a@b.com/cache"]

count = 0
for d in ds:
	count = count + 1
    try:
        shutil.rmtree(directory)
        print(f"[success] {count} {d}")
    except OSError as e:
        print(f"[fail] {count} {d}")

【5】不递归删除子目录

import os
import shutil

for root, dirs, files in os.walk("/gclouddata"):
    for dn in dirs:
        #photodir = os.path.join(root, dn, "backup", "image")
        photodir = os.path.join(root, dn, "backup", "gmail")

        try:
            print(f"start remove {photodir}")
            shutil.rmtree(photodir)
            print(f"end remove {photodir}")
        except OSError as e:
            print(e)
            
    break
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值