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

如何递归比较两个文件夹中文件的用户与组权限?

目录文件所有者/组权限对比方案

你要对比两个WordPress wp-content目录下共同存在的文件的所有者和组权限,同时避开修改时间这类无关差异,我给你整理了实用的解决方案:

1. 实现需求的单行命令

这个命令会自动找出两个目录都存在的文件,只提取权限、所有者和组信息进行对比,只输出有差异的内容,完全符合你的预期:

comm -12 <(find /wordpress/htdocs/wp-content -type f | sort) <(find /wordpress/htdocs2/wp-content -type f | sort) | while read f; do f2="${f/htdocs/wp-content/htdocs2/wp-content}"; stat1=$(stat -c "%A %U %G" "$f"); stat2=$(stat -c "%A %U %G" "$f2"); [ "$stat1" != "$stat2" ] && echo "$stat1 $f || $stat2 $f2"; done

命令解析:

  • comm -12 <(...) <(...):通过find生成两个目录的有序文件列表,再用comm提取出两者都存在的文件路径(取交集)
  • while read f:循环处理每个共同存在的文件
  • f2="${f/htdocs/wp-content/htdocs2/wp-content}":通过字符串替换,把第一个路径里的htdocs/wp-content换成htdocs2/wp-content,快速得到第二个目录对应的文件路径
  • stat -c "%A %U %G":只提取文件的权限符号(比如-rw-rw-r--)、所有者和组,自动忽略修改时间、文件大小这些无关信息
  • 最后对比两个文件的提取信息,只有当内容不同时才输出你想要的格式

如果后续要对比权限的数值(比如664),只需要把stat的参数改成%a %U %G即可。

2. diff并排模式显示完整行

diff的并排模式默认会根据终端宽度截断行内容,你可以用-W参数指定足够大的宽度来显示完整行,比如:

diff -y -W 200 /wordpress/htdocs/usergroup.txt /wordpress/htdocs2/usergroup.txt
  • -y:启用并排对比模式
  • -W 200:设置每行最大宽度为200(你可以根据自己的文件路径长度调整这个数值,比如设成300)

如果只想看差异行,还可以加上--suppress-common-lines参数,过滤掉内容相同的行,让结果更清晰:

diff -y -W 200 --suppress-common-lines /wordpress/htdocs/usergroup.txt /wordpress/htdocs2/usergroup.txt

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:38:44