我希望运行一个Linux命令,它将递归地比较两个目录,并只输出不同目录的文件名。这包括在一个目录中而不在另一个目录中的任何内容,反之亦然,以及文本差异。
当前回答
在我的linux系统上获取文件名
diff -q /dir1 /dir2|cut -f2 -d' '
其他回答
如果你想获取一个文件列表,这些文件只在一个目录中,而不是它们的子目录,只有它们的文件名:
diff -q /dir1 /dir2 | grep /dir1 | grep -E "^Only in*" | sed -n 's/[^:]*: //p'
如果你想递归列出所有的文件和目录,它们的完整路径是不同的:
diff -rq /dir1 /dir2 | grep -E "^Only in /dir1*" | sed -n 's/://p' | awk '{print $3"/"$4}'
这样就可以对所有文件应用不同的命令。
例如,我可以删除dir1而不是dir2中的所有文件和目录:
diff -rq /dir1 /dir2 | grep -E "^Only in /dir1*" | sed -n 's/://p' | awk '{print $3"/"$4}' xargs -I {} rm -r {}
您也可以使用rsync
rsync -rv --size-only --dry-run /my/source/ /my/dest/ > diff.out
rsync -rvc --delete --size-only --dry-run source dir target dir
在我的linux系统上获取文件名
diff -q /dir1 /dir2|cut -f2 -d' '
从diff手册页:
-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
推荐文章
- fork(), vfork(), exec()和clone()的区别
- 在tmux中保持窗口名称固定
- 如何生成一个核心转储在Linux上的分段错误?
- 在Python中如何在Linux和Windows中使用“/”(目录分隔符)?
- 使用vimdiff查看所有' git diff '
- 如何在Apache服务器上自动将HTTP重定向到HTTPS ?
- 如何限制从grep返回的结果的数量?
- 将值从管道读入shell变量
- 以相对于当前目录的路径递归地在Linux CLI中列出文件
- 如何使用xargs复制名称中有空格和引号的文件?
- 在makefile中抑制命令调用的回声?
- 在套接字编程中AF_INET和PF_INET的区别是什么?
- Chmod递归
- 任何方式退出bash脚本,但不退出终端
- 如何查看按实际内存使用情况排序的顶级进程?