如何比较 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 <(cd $1; tree -afpiug ) <(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=+
无论哪种方式,只需将结果捕获到上述两个文件中,然后使用diff
或sdiff
来比较结果。
【讨论】:
【参考方案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 上的权限?的主要内容,如果未能解决你的问题,请参考以下文章