如何在find命令中添加cksum并在文件名后显示文件的cksum值
在find命令中显示文件的cksum值
嘿,这个需求挺实用的!其实通过find的参数配合cksum命令就能轻松实现,给你几种靠谱的方案:
方法1:直接用find + exec调用cksum
这是最直观的方式,因为cksum本身就会输出校验值和对应文件名,命令如下:
find /你的搜索路径 -type f -exec cksum {} \;
/你的搜索路径替换成你实际要查找的目录(比如/home/abu/docs)-type f确保只查找文件(排除目录、链接等)-exec cksum {} \;对每一个找到的文件执行cksum命令,{}代表当前匹配到的文件,\;是-exec的结束标记
执行后会输出类似这样的结果:
1234567890 1234 /home/abu/docs/file1.txt 0987654321 5678 /home/abu/docs/file2.jpg
方法2:自定义输出格式(先文件名后校验值)
如果你想调整输出顺序,比如先显示文件名再显示cksum值,可以用bash -c来包装命令:
find /你的搜索路径 -type f -exec bash -c 'echo "$1 $(cksum "$1" | cut -d" " -f1)"' _ {} \;
这里的逻辑是:
bash -c启动一个子shell执行自定义命令$1指代传入的文件名({})cksum "$1" | cut -d" " -f1只提取cksum的校验值部分(默认cksum输出是“校验值 文件大小 文件名”,用cut拆分后取第一个字段)- 最后把文件名和校验值拼接输出,结果类似:
/home/abu/docs/file1.txt 1234567890 /home/abu/docs/file2.jpg 0987654321
方法3:批量处理提升效率(适合大量文件)
如果要查找的文件数量很多,用xargs批量处理会比逐个exec更高效,同时还能兼容带空格/特殊字符的文件名:
find /你的搜索路径 -type f -print0 | xargs -0 cksum
-print0让find用空字符分隔文件名,避免空格等特殊字符导致的错误xargs -0读取空字符分隔的输入,批量传给cksum命令
额外技巧:过滤特定文件
如果只想对特定类型的文件计算cksum,比如只找.txt文件,可以加-name参数:
find /你的搜索路径 -type f -name "*.txt" -exec cksum {} \;
内容的提问来源于stack exchange,提问作者Fazil
相关产品推荐
相关产品推荐

