我试图diff
在目录的两个副本(例如工作和备份)中的所有同名文件之间找到s。例如,我可以在diff
两个文件中使用两个同名文件:
> diff d1/f.cpp d2/f.cpp
或者我可以找到目录之间的差异:
> diff d1 d2
但我怎样才能找到*.cpp
文件之间的差异呢?
> diff d1/*.cpp d2/*.cpp
似乎不起作用(出于明显的原因)。
[用循环解决可能很容易,但我正在努力寻找更优雅的方法]
Rin*_*ind 57
diff -qr {DIR1} {DIR2}
执行两个目录中的所有文件。
q
仅显示差异r
递归。如果您不需要它,请不要使用它您不能diff
直接告诉使用通配符,但您可以添加:
-x PAT --exclude=PAT
Exclude files that match PAT.
-X FILE --exclude-from=FILE
Exclude files that match any pattern in FILE.
Run Code Online (Sandbox Code Playgroud)
排除文件。因此,如果您只想要*.cpp
最简单的方法是创建一个文本文件,列出所有不是*.cpp
. 您可以使用以下命令执行此操作:
ls -I "*.cpp" > excluded_files
其中-I "*.cpp"
参数忽略所有 .cpp 文件。请注意,引号是必需的。
gei*_*rha 16
您可以使用为每个文件运行 diff 的 shell 循环,尽管这不会捕获 d2 包含文件但 d1 不包含文件的情况。不过,这可能就足够了。
for file in d1/*.cpp; do
diff "$file" "d2/${file##*/}"
done
Run Code Online (Sandbox Code Playgroud)
或者全部在一行上:
for file in d1/*.cpp; do diff "$file" "d2/${file##*/}"; done
Run Code Online (Sandbox Code Playgroud)
该${file##*/}
部分是一个特殊的参数扩展。
如果文件变量包含d1/hello.cpp
,"${file##*/}"
则将扩展为hello.cpp
(文件的值,但包括最后一个/删除的所有内容)。
所以"d2/${file##*/}"
将导致d2/hello.cpp
结果 diff 命令因此diff d1/hello.cpp d2/hello.cpp
有关bash 中字符串操作的更多信息,请参阅http://mywiki.wooledge.org/BashFAQ/100。
附带说明一下,版本控制系统(例如 subversion、git、mercurial 等)将使这种类型的差异变得更加容易。
归档时间: |
|
查看次数: |
88595 次 |
最近记录: |