繁体   English   中英

如何仅在目录中为文本文件创建补丁文件

[英]How to create a patch file for text files only in a directory

我有一个包含数百个文本文件和 object 文件的目录。 我在其他地方有这个目录的副本,我对其进行了编辑并重新编译。 object 文件现在不同了,但我只想从文本文件生成补丁。 有没有办法做到这一点,还是我需要将它们分成不同的文件夹?

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 允许扩展通配符。

$: 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没有包含选项,但我们可以通过使用find获取不是文本文件的文件列表来绕过它,然后我们可以使用-X排除那些文件。 这一个班轮将做到这一点。

find original new ! -name '*.txt' -printf '%f\n' -type f | diff -uraN original/ new/ -X - > patch.diff

如果您想了解有关其工作原理的更多信息,可以查看finddiff的手册页。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM