文章目录
【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