仅输出文件名的差异。

14 浏览
0 Comments

仅输出文件名的差异。

我想运行一个Linux命令,用于递归比较两个目录并仅输出不同的文件名。这包括在一个目录中存在而在另一个目录中不存在(或反之亦然),以及文本差异。

0
0 Comments

这个问题的出现的原因是想要从两个目录中获取只在一个目录中而不在其子目录中的文件列表,并且只获取它们的文件名。解决方法是使用diff命令和其他一些命令来过滤和提取所需的文件名。

首先,我们可以使用以下命令来获取只在一个目录中而不在其子目录中的文件名:

diff -q /dir1 /dir2 | grep /dir1 | grep -E "^Only in*" | sed -n 's/[^:]*: //p'

这个命令的含义是:使用diff命令比较两个目录,并输出只在第一个目录中而不在第二个目录中的文件列表。然后使用grep命令过滤出包含"/dir1"的行,即只获取第一个目录中的文件。接下来使用grep命令再次过滤出以"Only in"开头的行,这样就只获取了文件名。最后使用sed命令提取文件名并输出。

如果想要递归列出所有与其完整路径不同的文件和目录,可以使用以下命令:

diff -rq /dir1 /dir2 | grep -E "^Only in /dir1*" | sed -n 's/://p' | awk '{print $3"/"$4}'

这个命令的含义是:使用diff命令递归比较两个目录,并输出只在第一个目录中而不在第二个目录中的文件和目录列表。然后使用grep命令过滤出以"Only in /dir1"开头的行,即只获取第一个目录中的文件和目录。接下来使用sed命令提取文件和目录名,并输出。最后使用awk命令将文件和目录名组合成完整路径。

通过这种方式,可以对所有文件应用不同的命令。例如,可以删除只在第一个目录中而不在第二个目录中的所有文件和目录:

diff -rq /dir1 /dir2 | grep -E "^Only in /dir1*" | sed -n 's/://p' | awk '{print $3"/"$4}' xargs -I {} rm -r {}

这个命令的含义是:使用diff命令递归比较两个目录,并输出只在第一个目录中而不在第二个目录中的文件和目录列表。然后使用grep命令过滤出以"Only in /dir1"开头的行,即只获取第一个目录中的文件和目录。接下来使用sed命令提取文件和目录名,并输出。最后使用awk命令将文件和目录名组合成完整路径,并使用xargs命令将路径作为参数传递给rm命令,从而删除这些文件和目录。

通过使用这些命令,可以方便地获取并处理只在一个目录中而不在另一个目录中的文件列表。

0
0 Comments

原因:在使用rsync命令进行文件同步时,使用了--size-only参数来只比较文件大小而不比较文件内容。然而,--size-only参数会导致忽略掉文件大小相同但内容不同的文件。

解决方法:可以使用rsync命令的其他参数来实现只输出文件名的目的。其中一种方法是使用rsync命令的-i参数来直接获取文件列表,并通过管道和cut命令来提取文件名。

以下是一个示例命令:

rsync -ric --dry-run old/ new/ | cut -d" " -f 2

这种方法非常适用于查找缺失的文件,特别是在网络共享中。因为它不会比较文件内容,只会比较文件名。

需要注意的是,在rsync命令的源路径和目标路径中,要确保包含尾部斜杠。如果没有尾部斜杠,rsync命令可能无法正确工作,只会枚举所有文件名。

关于不检查文件内容的评论,有时这是可以接受的,至少作为第一步。但是,即使文件大小相同,文件内容很可能也不完全相同。因此,如果需要检查完整的文件内容,可以排除--size-only参数。

0
0 Comments

问题的出现原因是用户想要比较两个目录中的文件差异,但是默认的diff命令会显示文件的详细差异,用户只想要输出文件名。解决方法是使用diff命令的-q选项,该选项只报告文件是否不同,不显示具体差异的细节。

diff命令是一个用于比较文件和目录差异的常用工具。根据diff命令的man页面,使用-q选项可以只报告文件是否不同,而不显示具体差异的细节。使用-r选项可以递归比较任何子目录。

下面是一个示例命令:

diff -qr dir1 dir2

示例输出(根据不同的语言环境):

$ ls dir1 dir2
dir1:
same-file  different  only-1
dir2:
same-file  different  only-2
$ diff -qr dir1 dir2
Files dir1/different and dir2/different differ
Only in dir1: only-1
Only in dir2: only-2

在CentOS 7中,diff命令的man页面将-q选项描述为"仅在文件不同时报告",这比用户所写的更不清楚。这个问题的解决方法是使用diff命令的-q选项,这样可以只输出文件名,而不显示具体差异的细节。这通常是用户想要的,但有时候用户只想要查看文件名和大小,而不查看内容,这时可以使用rsync命令。

此外,用户还可以在命令中使用-x选项来排除某些子目录。例如,命令diff -qr repo1 repo2 -x ".git"将比较两个目录,但会排除包含".git"的文件路径。

,通过使用diff命令的-q选项,可以只输出文件名而不显示具体差异的细节,满足用户只想要文件名的需求。使用-x选项可以排除某些子目录。这些方法在不同的操作系统上都适用,比如CentOS 7和macOS。

0