文件夹和文件的区别


3

我有两个文件夹,里面有不同的文件夹。这些文件夹还包含不同的文件。我正在寻找将使我这两个父文件夹之间的区别的命令。不仅一个文件夹和另一个文件夹中包含的文件不同,而且文件内容也不同。

到目前为止,我已经这样做了:diff -rq fold1 fold2..但这并没有给我这些文件之间的区别。

我可以运行什么命令?


只是一个猜测:在diff命令行中添加“ -N”标志是否可以解决您的问题?
jofel 2012年

删除-q,然后查看-a选项(在-N@jofel已经建议的旁边)。另外,如何阅读精美的手册?
斯特凡Chazelas

斯蒂芬(Stephane),我希望可以手动阅读1000个文件...
Hommer Smith

2
也许值得看看Meld:meldmerge.org
Bernhard

Answers:


1

也许您可以使用rsync作为技巧。

rsync --dry-run --delete --recursive --verbose dir1/ dir2

或者,短版

rsync -nrv --delete dir1/ dir2

不要忘记--dry-run或-n选项,否则目标目录(dir2)将与源目录(dir1)相同。

这将得出两个目录的差异,包括目录名和文件名以及文件内容。(您甚至可以在2台不同的计算机上比较2个目录)

sending incremental file list
deleting dir3-1/   # this directory (name) doesn't exist in source directory
deleting file2.txt # this file      (name) doesn't exist in source directory
file1.txt          # this file is different (content) from the source files
dir3/              # this directory (name) doesn't exist in destination directory

sent 95 bytes  received 21 bytes  232.00 bytes/sec
total size is 4  speedup is 0.03 (DRY RUN)

0

对于文件夹的差异,您可以尝试

ls -R fold1 > list1
ls -R fold2 > list2
diff list1 list2.

diff但是,对于文件,我认为您需要编写一个脚本(也许解析ls -R输出)。

一种有点骇人听闻的解决方案:

find fold1 -type f|while read x; do [ -e fold2/$x ] && diff fold1/$x fold2/$x >> files_diff.out; done

但是,这可能不是最优雅或有效的方法。我相信更精通Bash的人可以提出更好的方法。如果您精通Perl,建议您使用其File :: Find模块。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.