linux下文件夹对比

diff 命令是 linux上非常重要的工具,用于比较文件的内容,特别是比较两个版本不同的文件以找到改动的地方。diff在命令行中打印每一个行的改动。最新版本的diff还支持二进制文件。diff程序的输出被称为补丁 (patch),因为Linux系统中还有一个patch程序,可以根据diff的输出将a.c的文件内容更新为b.c。diff是svn、cvs、git等版本控制工具不可或缺的一部分。

1.命令格式:

diff[参数][文件1或目录1][文件2或目录2]

2.命令功能:

diff命令能比较单个文件或者目录内容。如果指定比较的是文件,则只有当输入为文本文件时才有效。以逐行的方式,比较文本文件的异同处。如果指定比较的是目录的的时候,diff 命令会比较两个目录下名字相同的文本文件。列出不同的二进制文件、公共子目录和只在一个目录出现的文件。

3.命令参数:

-a 所有的文件都视为文本文件来逐行比较,甚至他们似乎不是文本文件.
-b 忽略空格引起的变化.
-B 忽略插入删除空行引起的变化.
-c 使用上下文输出格式.
-i 忽略大小写.
-P 在目录比较中,如果那个文件只在其中的一个目录中找到,那么它被视为在另一个目录中是一个空文件.
-q 仅报告文件是否相异,不报告详细的差异.
-r 当比较目录时,递归比较任何找到的子目录.

4、用例
[b]diff -c -a -b -B -r A B [/b]
比较后的结果:

Only in A: aa
diff -c -a -b -B -r A/a.txt B/a.txt
*** A/a.txt 2016-11-07 09:21:57.089821250 +0800
--- B/a.txt 2016-11-07 09:17:19.231957097 +0800
***************
*** 1,6 ****
! ppackage com.ectrip.pms.app.interceptor;
! asdfdafafaf
! af
import com.ectrip.framework.util.StringUtil;
import com.ectrip.pms.app.util.Const;
import com.ectrip.pms.channel.app.vo.custom.CustomVO;
--- 1,5 ----
! package com.ectrip.pms.app.interceptor;
!
import com.ectrip.framework.util.StringUtil;
import com.ectrip.pms.app.util.Const;
import com.ectrip.pms.channel.app.vo.custom.CustomVO;
***************
*** 27,33 ****
String channel = (String) request.getAttribute("channel");
CustomVO user = session == null ? null : (CustomVO) session.getAttribute(Const.SESSION_USER);
if (user == null) {
! // 删除登录cookieasfsdf
WebUtil.removeCookie(request, response, "loginName");
// ajax请求添加header判断登录状态,app请求
if (isAjax ||StringUtil.isEmpty(channel) || channel.equalsIgnoreCase("APP")) {
--- 25,31 ----
String channel = (String) request.getAttribute("channel");
CustomVO user = session == null ? null : (CustomVO) session.getAttribute(Const.SESSION_USER);
if (user == null) {
! // 删除登录cookie
WebUtil.removeCookie(request, response, "loginName");
// ajax请求添加header判断登录状态,app请求
if (isAjax ||StringUtil.isEmpty(channel) || channel.equalsIgnoreCase("APP")) {
***************
*** 45,48 ****
--- 42,49 ----
}

}
+ :x
+
+ :xOnly in A: aa

说明:
“+” 比较的文件的后者比前着多一行
“-” 比较的文件的后者比前着少一行
“!” 比较的文件两者有差别的行

[b]diff -c -a -b -B -r A B > ABdir.diff [/b]
比较后的差异文件到ABdir.diff文件中

[b]diff -i -b -B -r -y A B > ABdir.diff [/b]
横向对比
结果:
【code="java"】
diff -i -b -B -r -y A/a.txt B/a.txt
ppackage com.ectrip.pms.app.interceptor; | package com.ectrip.pms.app.interceptor;
asdfdafafaf |
af <
import com.ectrip.framework.util.StringUtil; import com.ectrip.framework.util.StringUtil;
import com.ectrip.pms.app.util.Const; import com.ectrip.pms.app.util.Const;
import com.ectrip.pms.channel.app.vo.custom.CustomVO; import com.ectrip.pms.channel.app.vo.custom.CustomVO;
import com.ectrip.web.framework.util.WebUtil; import com.ectrip.web.framework.util.WebUtil;
import org.springframework.web.servlet.handler.HandlerInterce import org.springframework.web.servlet.handler.HandlerInterce

import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSession;

/** /**
* Class Describe * Class Describe
* <p/> * <p/>
* User: yangguang Date: 16/10/15 Time: 下午12:58 * User: yangguang Date: 16/10/15 Time: 下午12:58
*/ */
public class LoginInterceptor extends HandlerInterceptorAdapt public class LoginInterceptor extends HandlerInterceptorAdapt

@Override
@Override public boolean preHandle(HttpServletRequest request, Http
public boolean preHandle(HttpServletRequest request, Http throws Exception {
throws Exception { Boolean isAjax = WebUtil.isAjax(request);
Boolean isAjax = WebUtil.isAjax(request); HttpSession session = WebUtil.getSession(request, fal
HttpSession session = WebUtil.getSession(request, fal String channel = (String) request.getAttribute("chann
String channel = (String) request.getAttribute("chann CustomVO user = session == null ? null : (CustomVO) s
CustomVO user = session == null ? null : (CustomVO) s if (user == null) {
if (user == null) { (
// 删除登录cookieasfsdf | // 删除登录cookie
WebUtil.removeCookie(request, response, "loginNam WebUtil.removeCookie(request, response, "loginNam
// ajax请求添加header判断登录状态,app请求 // ajax请求添加header判断登录状态,app请求
if (isAjax ||StringUtil.isEmpty(channel) || chan if (isAjax ||StringUtil.isEmpty(channel) || chan
response.addHeader("loginStatus", "0"); response.addHeader("loginStatus", "0");
response.setStatus(401); response.setStatus(401);
return false;
return false; } else {
} else { response.sendRedirect("login.jsp");
response.sendRedirect("login.jsp"); }
} return false;
return false; }
} return true;
return true;
}
}
}
} (
> :x
>
> :x
>
[/code]
说明:
“|”表示前后2个文件内容有不同
“<”表示后面文件比前面文件少了1行内容
“>”表示后面文件比前面文件多了1行内容
<think>好的,我现在需要回答用户关于在Linux对比两个文件夹内容的问题。用户提到了使用命令行方法,并且希望了解差异工具。根据用户提供的引用内容,特别是引用[1]到[4],我需要整合这些信息,给出详细的步骤和建议。 首先,用户的问题是如何比较两个文件夹的差异,所以我应该先回顾引用中的相关内容。引用[1]提到了使用diff命令比较两个目录,这是最直接的方法。diff命令可以比较文件内容的不同,但根据引用[4],当比较目录时,diff只会比较同名文件,不会递归子目录。因此,可能需要添加一些选项来增强功能,比如递归比较。 接下来,引用[3]和[4]提到了colordiff,这个工具可以高亮显示差异,可能对用户有帮助。用户可能需要安装这个工具,所以在步骤中应该包括安装方法,比如使用apt或yum安装。 另外,用户可能不仅想知道文件内容的差异,还想知道文件列表的不同。引用[1]中提到的其他命令,比如使用ls和sort结合diff比较文件列表,这也是有用的。所以需要分步骤说明:首先比较文件列表,再比较内容。 还有,rsync也是一个选项,虽然它主要用于同步,但使用--dry-run选项可以模拟同步过程并显示差异,这可能是一个实用的技巧。 现在需要组织这些信息,分点回答,确保每个方法都有对应的命令示例,并正确引用来源。同时,要检查是否满足用户的所有要求,比如命令行方法、差异工具,以及是否需要高亮显示。 可能需要注意的地方:diff的-r选项是否递归比较子目录,这在引用[4]中提到过,所以必须明确说明。此外,colordiff的安装步骤可能因发行版而异,需要给出通用的命令,比如apt和yum的例子。 最后,生成相关问题,参考用户提供的示例,可能的问题包括其他比较工具、递归比较的选项、忽略某些文件的方法等,这需要根据回答内容来设计。</think>在 Linux 系统中对比两个文件夹的内容差异,可通过以下命令行方法实现: --- ### 方法一:使用 `diff` 命令(基础对比) 1. **直接比较两个目录** 命令: ```bash diff -rq 目录1路径 目录2路径 ``` - `-r`:递归比较子目录 - `-q`:仅显示差异文件名(不显示具体内容) - 示例: ```bash diff -rq /home/user/dir1 /home/user/dir2 ``` 输出会列出仅在一个目录存在的文件或内容不同的文件[^1][^4]。 2. **显示详细内容差异** 移除 `-q` 参数,逐行对比文件内容: ```bash diff -r 目录1路径 目录2路径 ``` 适用于需要查看具体修改内容的场景[^2]。 --- ### 方法二:结合 `colordiff` 高亮差异 1. **安装 `colordiff` 工具** ```bash # Debian/Ubuntu sudo apt install colordiff # CentOS/RHEL sudo yum install colordiff ``` 2. **带颜色标记的对比** ```bash colordiff -r 目录1路径 目录2路径 ``` 输出结果中新增行标记为绿色,删除行标记为红色[^3]。 --- ### 方法三:比较文件列表(不涉及内容) 若只需对比两个目录中文件名差异,可结合 `ls` 和 `diff`: ```bash diff <(ls 目录1路径 | sort) <(ls 目录2路径 | sort) ``` - 输出会显示仅在一个目录存在的文件名。 --- ### 方法四:使用 `rsync` 模拟同步差异 ```bash rsync -nrc --delete 目录1路径/ 目录2路径/ ``` - `-n`:模拟执行(不实际修改文件) - `-c`:基于文件内容校验(而非修改时间) - `--delete`:显示目标目录中多余的文件 - 输出会列出需要同步的文件[^1]。 --- ### 注意事项 - **忽略隐藏文件**:添加 `--exclude=".*"` 到命令中可忽略隐藏文件。 - **权限差异**:使用 `diff -r` 时,文件权限不同也会被标记为差异。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值