我正在尝试做类似的事情:
diff `ls -1a ./dir1` `ls -1a ./dir2`
但由于显而易见的原因,这种方法行不通。有没有比这更好的方法(一行代码)来实现这一点?
ls -1a ./dir1 > lsdir1
ls -1a ./dir2 > lsdir2
diff lsdir1 lsdir2
谢谢
答案1
你很接近了。在 bash 中你想要流程替代,而不是命令替换:
diff <(ls -1a ./dir1) <(ls -1a ./dir2)
答案2
diff -rq dir1 dir2
使用 -r 选项遍历整个目录树,递归检查每棵树中可比较点处出现的子目录和文件之间的差异。诀窍是使用 -q 选项来抑制逐行比较
答案3
这两个答案对我来说都不起作用:
- 我需要递归差异
- 我的文件夹没有并排
受到@Ignacio Vazquez-Abrams 的启发,我使用了:
diff <(查找 PATH1 | sed 's"PATH1""') <(查找 PATH2 | sed 's"PATH2""')
它可以很好地完成工作,并且可以改编为一个漂亮的脚本:
#!/bin/bash
# Usage : compDirs dir1 dir2
# compare the file/folder names recursively in Dir1 and Dir2
PATH1=$1
PATH2=$2
diff <(find $PATH1 | sed "s#$PATH1##") <(find $PATH2 | sed "s#$PATH2##")
答案4
扩展这,由于我没有足够的积分来评论,选项-y
(显示在两列中)会--suppress-common-lines
使其变得更好!
diff -y --suppress-common-lines <(ls -1a ./dir1) <(ls -1a ./dir2)
如果对点/隐藏文件不感兴趣,您可以-a
从部分中删除。ls