我有两个文件夹,其中包含许多子文件夹和文件。例如:
/wordpress/htdocs/wp-content/
/wordpress/htdocs2/wp-content/
在这两个文件夹下面,每个文件夹都包含许多子文件夹和文件的完整结构。我想要做的是比较两个子结构中存在的每个文件的所有权(在第二个命令权限中)。哪里有差异我想展示它们。
结果应如下所示:
-rw-rw-r-- 1 user1 group1 104343 Oct 23 2017 /wordpress/htdocs/wp-content/images/comment.jpg || -rw-rw-r-- 1 user1 group2 104343 May 15 2018 /wordpress/htdocs2/wp-content/images/comment.jpg
执行我在此搜索的命令后,将显示这两行,因为“同一”文件的组不同(同一文件但在不同的文件夹中)。
user1 group1 || user1 group2
我做过什么:
我尝试过在两个文件夹中使用以下命令并比较输出文件。但是这不起作用,因为几乎所有文件的修改时间都不同。因此,它不会将其缩小到真正相关的信息。
sudo find . -exec ls -l -all {} \; | sudo tee usergroup.txt >/dev/null
然后我用这个命令来比较结果:
diff -c /wordpress/htdocs/usergroup.txt /wordpress/htdocs2/usergroup.txt
但是如上所述,结果太大而且没有实际帮助。
如何解决这个问题 - 最好只使用一个班轮?
仅仅是为了好奇:在使用syde-by-side时,如何让diff
显示(或输出到文件中)整个行?它通常会在一定的时间内切断线。
答案 0 :(得分:0)
ls -l
输出包括每个文件的修改时间,这两个文件树之间的修改时间很可能不同,这就是diff
报告它们的原因。
您应该使用find
' -printf '…'
选项并仅打印相关信息。这也可以节省大量的ls
进程。在两棵树上做两次,输出可以更加明智地比较。
(顺便说一句,find
报告文件和文件夹,文件夹上的… -exec ls -al {} \;
会显示其内容 - 以及.
和..
等其他噪音你可以用-d
来抑制它,但正如我已经说过的,你应该完全避免使用ls
,因为它的主要目的是 list (因此,名称)目录的内容,而不是stat
单个文件。)
在并排模式(diff
)中使用-y
时,它必须切断某些点的每一行,因为您要求它显示第二行流畅地将接下来直接传递到第一个。默认情况下,每行输出最多130个字符(我猜),但您可以使用-W
更改它。就个人而言,我会完全避免并排显示,但是你走了:
#!/bin/bash
diff -y -W 300 --suppress-common-lines \
<(find /path1/wp-content -printf '%u %g %m %P\n') \
<(find /path2/wp-content -printf '%u %g %m %P\n')
请查看man diff
和man find
(关于-printf
的部分),了解您可以打印的文件大小等内容。为了抑制find
输出中的文件夹,您应该在-type f
部分之前放置-printf
(即仅在打印前找到真实文件)。我的例子可能无法完全回答你的问题,但你明白了。
PS:diff
通常会在不同的行附近输出一些上下文行,以便人和机器更容易在原始文件中找到这些行。事实上,在并排模式下,diff
实际上将默认显示所有 - 无论是否存在差异。 --suppress-common-lines
的选项会抑制这种情况。在正常模式(不是并排)中,该选项还会稍微改变diff
的输出格式 - 包括<
和>
在每个不同的行前面。也许这应该足够且易于阅读,因此您根本不需要并排选项。试试吧。
答案 1 :(得分:0)
可以说,这是解决这个问题的一种非常人为的方式:
process.on('unhandledRejection', (reason, p) => {
console.log('Unhandled Rejection at:', p);
console.log('reason:', reason);
});