我试图用备份来比较根文件系统上的文件,我想比较的工作有点像git
或者svn
diff
当一个文件被添加或删除-也就是说,显示完整的文件差异。diff
不幸的是只是打印一条No such file or directory
消息,这不是很有用。我找不到这个选项。
我能找到的最简单的解决方法是解析diff
输出和/diff -u path <(printf '')
或diff -u <(printf '') path
取决于存在的路径。这有点麻烦 - 可能是一个简单的diff
选项,可能只有 10 行代码。
另一个解决方法是
diff -u <([ -e "$path1" ] && cat "$path1") <([ -e "$path2" ] && cat "$path2")
Run Code Online (Sandbox Code Playgroud)
,但这会丢失差异中的文件名。
基于Craig Sanders 的回答和之前的解决方法,我最终得到了这个:
diff -u \
"$([ -e "$path1" ] && echo "$path1" || echo /dev/null)" \
"$([ -e "$path2" ] && echo "$path2" || echo /dev/null)"
Run Code Online (Sandbox Code Playgroud)
编辑:原来有是它的一个选项:
-N, --new-file
treat absent files as empty
Run Code Online (Sandbox Code Playgroud)
换句话说:
diff -Nu "$path1" "$path2"
Run Code Online (Sandbox Code Playgroud)
至少对于某些版本的 GNU diffutils' diff
,您可以使用该-N
标志直接执行此操作(尽管文档似乎说仅适用于目录差异)。
$ ls
foo
$ cat foo
foo
$ diff -u foo bar
diff: bar: No such file or directory
$ diff -uN bar foo
--- bar 1970-01-01 01:00:00.000000000 +0100
+++ foo 2012-09-04 12:45:34.000000000 +0200
@@ -0,0 +1 @@
+foo
$ diff -uN foo bar
--- foo 2012-09-04 12:45:34.000000000 +0200
+++ bar 1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-foo
$ diff -v
diff (GNU diffutils) 2.8.1
Copyright (C) 2002 Free Software Foundation, Inc.
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9484 次 |
最近记录: |