我有两个目录,它们具有相同的文件,但内容有所不同。我想列出那些不同的文件。例如
有两个文件夹Folder1和Folder2,其中包含文件file1、file2、file3等。文件夹 1 的文件 2 与文件夹 2 的文件 2 不相似。
所以我的命令应该列出file2。
我怎样才能做到这一点 ?
答案1
您可以将目录与以下内容进行比较diff
:
$ diff -qr dirA dirB
Only in dirB: file.txt
Files dirA/README and dirB/README differ
答案2
我确信有专门的工具用于此目的(fdupes
我想到)这个简单的脚本应该可以完成这项工作:
#!/usr/bin/env sh
if [ "a$1" = a -o "a$2" = a ]
then
echo Directory name missing.
echo Exiting
exit 1
fi
for i in "$1"/*
do
filename=$(basename "$i")
diff "${1}/${filename}" "${2}/${filename}" > /dev/null 2>&1
if [ "$?" -eq 1 ]
then
echo "$filename" is different
fi
done
exit 0
你必须有diff
二进制文件$PATH
(你可能有它)。用法:
$ ./diff.sh Folder1 Folder2
7 is different
file2 is different
答案3
解决方案一:
你可以去那里看看:https://askubuntu.com/questions/111495/how-to-diff-multiple-files-across-directories,尤其是Rinzwind的回答,规定你可以直接做diff -qr Folder1 Folder2
。
其他解决方案仅在您想要合并结果时才有用。
解决方案2: 如果您可以运行 GUI 应用程序,最好的解决方案是使用融合或者kdiff3。
解决方案3: 另一种解决方案是使用版本控制软件。例如,使用 git,您可以执行以下操作:
$ cd Folder1
$ git init
$ git add .
$ git commit -m "First commit"
$ rm -rf *
$ cp -r /PATH/TO/Folder2/* ./
然后,您可以使用git status
或git diff
来查看差异。对于此解决方案,您可能需要先进行备份。请注意,rm -rf *
不要删除点文件。
解决方案4:
最后,你可以看看这个vim
插件(我还没试过):https://github.com/will133/vim-dirdiff。我确信这样的插件也存在于Emacs
.