You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Shell脚本中合并ls与cksum命令的输出结果

可行的实现方法

方法一:遍历单个文件拼接输出

用for循环逐个处理文件,对每个文件分别获取ls -lrt和cksum的结果,再拼接成一行:

for file in *; do
    # 只处理普通文件,跳过目录、链接等
    [ -f "$file" ] && echo "$(ls -lrt -- "$file") $(cksum -- "$file")"
done
  • -- 用来兼容文件名带空格、连字符开头的情况,避免命令解析出错
  • [ -f "$file" ] 确保只处理普通文件,如果你需要包含其他类型(比如目录),可以去掉这个判断或者换成[ -e "$file" ]

方法二:包含隐藏文件的版本

如果需要处理当前目录下的隐藏文件(比如.bashrc),可以调整循环范围,同时排除.和..这两个特殊目录:

for file in .* *; do
    [ -f "$file" ] && [ "$file" != "." ] && [ "$file" != ".." ] && echo "$(ls -lrt -- "$file") $(cksum -- "$file")"
done

原命令失败的原因

你之前的(ls -l; cksum ls) | xargs逻辑有问题:

  1. 括号里的命令是先执行ls -l输出所有文件的长列表,再执行cksum ls``(这里的ls会生成当前目录的文件名列表,cksum一次性处理所有文件,输出每个文件的校验行)
  2. 最终输出是ls的所有行在前,cksum的所有行在后,是两段独立的内容,xargs只能把这些内容当成一堆参数处理,没法实现你要的“每行ls信息+对应cksum信息”的合并效果

内容的提问来源于stack exchange,提问作者92rwf0lXXW4m

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 21:27:12