如何仅在目录中为文本文件创建补丁文件
How to create a patch file for text files only in a directory
我有一个包含数百个文本文件和目标文件的目录。我在其他地方有这个目录的副本,我编辑并重新编译了它。目标文件现在不同了,但我只想从文本文件生成一个补丁。有没有办法做到这一点,还是我需要将它们分成不同的文件夹?
diff -uraN original/ new/ > patch.diff
如何在此命令中指定文件类型?
-X 排除,但我想要相反的结果。我想排除除 .txt 文件之外的所有内容
你想要每个 txt 一个差异吗?
for f in original/*.txt # for each original
do d=${f#original/} # get base name
diff -uraN "$f" "new/$d" > ${d%.txt}.diff # diff old against new
done
你提到-X
;我不确定 diff
是如何实现它的,但是 bash CLI 允许扩展 globbing。
$: shopt -s extglob
$: ls -l *.???
-rw-r--r-- 1 P2759474 1049089 0 May 10 21:49 OCG3C82.tmp
-rw-r--r-- 1 P2759474 1049089 0 May 11 03:22 OCG511D.tmp
-rw-r--r-- 1 P2759474 1049089 0 May 12 00:03 OCG5214.tmp
-rw-r--r-- 1 P2759474 1049089 0 May 14 09:34 a.txt
-rw-r--r-- 1 P2759474 1049089 0 May 14 09:34 b.txt
$: ls *.!(txt)
-rw-r--r-- 1 P2759474 1049089 0 May 10 21:49 OCG3C82.tmp
-rw-r--r-- 1 P2759474 1049089 0 May 11 03:22 OCG511D.tmp
-rw-r--r-- 1 P2759474 1049089 0 May 12 00:03 OCG5214.tmp
如果我没有正确理解你的问题,你只想对扩展名为 .txt
.
的任何文件执行 diff
命令
不幸的是,diff
没有 include 选项,但我们可以通过使用 find
获取非文本文件的文件列表来绕过它,然后我们可以排除那些使用 -X
。这一个班轮会做到这一点。
find original new ! -name '*.txt' -printf '%f\n' -type f | diff -uraN original/ new/ -X - > patch.diff
如果您想了解有关其工作原理的更多信息,可以查看 find
和 diff
的手册页。
我有一个包含数百个文本文件和目标文件的目录。我在其他地方有这个目录的副本,我编辑并重新编译了它。目标文件现在不同了,但我只想从文本文件生成一个补丁。有没有办法做到这一点,还是我需要将它们分成不同的文件夹?
diff -uraN original/ new/ > patch.diff
如何在此命令中指定文件类型?
-X 排除,但我想要相反的结果。我想排除除 .txt 文件之外的所有内容
你想要每个 txt 一个差异吗?
for f in original/*.txt # for each original
do d=${f#original/} # get base name
diff -uraN "$f" "new/$d" > ${d%.txt}.diff # diff old against new
done
你提到-X
;我不确定 diff
是如何实现它的,但是 bash CLI 允许扩展 globbing。
$: shopt -s extglob
$: ls -l *.???
-rw-r--r-- 1 P2759474 1049089 0 May 10 21:49 OCG3C82.tmp
-rw-r--r-- 1 P2759474 1049089 0 May 11 03:22 OCG511D.tmp
-rw-r--r-- 1 P2759474 1049089 0 May 12 00:03 OCG5214.tmp
-rw-r--r-- 1 P2759474 1049089 0 May 14 09:34 a.txt
-rw-r--r-- 1 P2759474 1049089 0 May 14 09:34 b.txt
$: ls *.!(txt)
-rw-r--r-- 1 P2759474 1049089 0 May 10 21:49 OCG3C82.tmp
-rw-r--r-- 1 P2759474 1049089 0 May 11 03:22 OCG511D.tmp
-rw-r--r-- 1 P2759474 1049089 0 May 12 00:03 OCG5214.tmp
如果我没有正确理解你的问题,你只想对扩展名为 .txt
.
diff
命令
不幸的是,diff
没有 include 选项,但我们可以通过使用 find
获取非文本文件的文件列表来绕过它,然后我们可以排除那些使用 -X
。这一个班轮会做到这一点。
find original new ! -name '*.txt' -printf '%f\n' -type f | diff -uraN original/ new/ -X - > patch.diff
如果您想了解有关其工作原理的更多信息,可以查看 find
和 diff
的手册页。