如何比较 2 个文件夹在 Unix 上的权限?

Posted

技术标签:

【中文标题】如何比较 2 个文件夹在 Unix 上的权限?【英文标题】:How to compare 2 folders' permission on Unix? 【发布时间】:2014-08-24 09:43:52 【问题描述】:

给定 2 个文件夹:/folder1 和 /folder2,每个文件夹里面都有一些文件和子文件夹。 我使用以下命令来比较包括子文件夹在内的文件差异:

diff -buf /folder1 /folder2

在文件夹和文件结构方面没有发现差异。

但是,我发现这两个文件夹的文件之间存在一些权限差异。有没有简单的方法/命令来比较Unix上这2个文件夹(包括子文件夹)下每个文件的权限?

谢谢,

【问题讨论】:

请编辑您的问题(使用 编辑工具)并说明可能出现的问题范围。您是指“文件夹”权限,还是文件夹内的文件或文件夹内的文件夹或文件夹内的文件夹内的文件?你知道ls -ld folder1 folder2 吗?或find /folder1 /folder2 -ls ?请参阅***.com/questions/24516644/… 了解有关如何更好地指定您的问题的一些想法。祝你好运。 【参考方案1】:

如果您安装了tree 命令,它可以使用与John C suggested 类似的过程非常简单地完成这项工作:

cd a
tree -dfpiug > ../a.list
cd ../b
tree -dfpiug > ../b.list
cd ..
diff a.list b.list

或者,您可以在一行中执行此操作:

diff <(cd a; tree -dfpiug) <(cd b; tree -dfpiug)

tree的选项如下:

-d 只扫描目录(也省略比较文件) -f 显示完整路径 -p 显示权限(例如,[drwxrwsr-x]-i 删除 tree 的正常分层缩进 -u 显示所有者的用户名 -g 显示组名

【讨论】:

我可以建议将-a 添加到tree 以显示隐藏文件吗? 知道如何使这个单行与diff -y 一起工作吗?出于某种原因,它不是并排打印差异,而是打印几乎所有内容。 把它变成了一个方便的函数:dirdiff () diff &lt;(cd $1; tree -afpiug ) &lt;(cd $2; tree -afpiug) ;。将其粘贴到您的 .alias 或 .bashrc 或在 shell 启动时运行的任何脚本中,然后像这样使用:dirdiff dir1 dir2【参考方案2】:

比较两个目录的权限的一种方法是将ls -al 的输出捕获到每个目录和diff 的文件中。

假设您有两个目录,分别称为 a 和 b。

cd a
ls -alrt > ../a.list
cd ../b
ls -alrt > ../b.list
cd ..
diff a.list b.list

如果您发现由于文件大小和日期戳而给您带来太多噪音,您可以使用 awk 过滤掉 ls 返回的某些列,例如:

ls -al | awk 'printf "%s %s %s %s %s %s\n", $1,$2,$3,$4,$5,$9 '

或者,如果幸运的话,您可以使用以下方法删除时间戳

ls -lh --time-style=+

无论哪种方式,只需将结果捕获到上述两个文件中,然后使用diffsdiff 来比较结果。

【讨论】:

【参考方案3】:

find /dirx/ -lsa |awk ' print $6" "$6" " $11 ' 2倍楼主 find /dirx/ -lsa |awk ' print $6" "$6" " $11 '2次组 find /dirx/ -lsa |awk ' print $5" "$6" " $11 '所有者和组

然后您可以重定向到一个文件以进行 diff 或只是调查管道到更少(或更多)。 您还可以通过管道连接到 grep 和 grep 或“ungrep” (grep -v) 以缩小结果范围。 如果目录内容不同,diff 就不是很有用

【讨论】:

以上是关于如何比较 2 个文件夹在 Unix 上的权限?的主要内容,如果未能解决你的问题,请参考以下文章

Apache+PHP 在 unix 上的写权限

Unix文件系统基本概述

UNIX文件夹中设置的权限未正确传输到NFS共享

UNIX Laravel Artisan文件权限

unix 比较文件名列表

如何设置UNIX/Linux中新创建目录或文件的默认权限