Linux 命令行入门教程
34. locate 与 xargs
本教程共 90 篇 · 第 34 篇
34. locate 与 xargs
find 慢在实时扫描整棵目录树。这章的 locate 另走一条路:它查一个预先建好的文件名数据库,所以飞快,但看不到刚建的文件。
数据库靠 updatedb 更新,系统通常会定时跑。想立刻生效,手动更新:
sudo updatedb
基本用法,按名字搜(匹配的是完整路径里包含的字样):
locate notes.txt
locate "*.conf"
常用选项:-i 忽略大小写,-c 只数数量,-l N 限制条数,-S 看数据库统计:
locate -ci "readme"
locate -l 5 "*.png"
Notelocate 找不到刚建的文件,因为数据库还没更新。建完文件先
sudo updatedb,再 locate 就能搜到。
xargs 把前一条命令的输出,转成后一条命令的参数。比如把 find 找到的一堆文件交给 rm:
find . -name "*.tmp" | xargs rm
文件名里带空格时,上面的写法会出错。用 -0 配合 find 的 -print0 才稳:
find . -name "*.tmp" -print0 | xargs -0 rm
-I 指定占位符,可逐个处理:
find . -name "*.log" | xargs -I {} mv {} /backup/
Warning
find ... | xargs rm同样会真删文件,且不可恢复。执行前先用find ... -print看清楚会命中哪些,确认无误再接| xargs rm;含空格文件名务必用-print0 | xargs -0。
小结:locate 查库秒出、需 updatedb 刷新;xargs 把输出拼成参数,配合 find 做批量删除或移动。