logo

oasis-root

Compiled tree of Oasis Linux based on own branch at <https://hacktivis.me/git/oasis/> git clone https://anongit.hacktivis.me/git/oasis-root.git

diff.1 (10919B)


  1. .\" $OpenBSD: diff.1,v 1.52 2024/12/03 07:09:14 jmc Exp $
  2. .\"
  3. .\" Copyright (c) 1980, 1990, 1993
  4. .\" The Regents of the University of California. All rights reserved.
  5. .\"
  6. .\" Redistribution and use in source and binary forms, with or without
  7. .\" modification, are permitted provided that the following conditions
  8. .\" are met:
  9. .\" 1. Redistributions of source code must retain the above copyright
  10. .\" notice, this list of conditions and the following disclaimer.
  11. .\" 2. Redistributions in binary form must reproduce the above copyright
  12. .\" notice, this list of conditions and the following disclaimer in the
  13. .\" documentation and/or other materials provided with the distribution.
  14. .\" 3. Neither the name of the University nor the names of its contributors
  15. .\" may be used to endorse or promote products derived from this software
  16. .\" without specific prior written permission.
  17. .\"
  18. .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  19. .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  20. .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  21. .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  22. .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  23. .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  24. .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  25. .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  26. .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  27. .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  28. .\" SUCH DAMAGE.
  29. .\"
  30. .\" @(#)diff.1 8.1 (Berkeley) 6/30/93
  31. .\"
  32. .Dd $Mdocdate: December 3 2024 $
  33. .Dt DIFF 1
  34. .Os
  35. .Sh NAME
  36. .Nm diff
  37. .Nd differential file and directory comparator
  38. .Sh SYNOPSIS
  39. .Nm diff
  40. .Op Fl abdipTtw
  41. .Oo
  42. .Fl c | e | f |
  43. .Fl n | q | u
  44. .Oc
  45. .Op Fl I Ar pattern
  46. .Op Fl L Ar label
  47. .Ar file1 file2
  48. .Nm diff
  49. .Op Fl abdipTtw
  50. .Op Fl I Ar pattern
  51. .Op Fl L Ar label
  52. .Fl C Ar number
  53. .Ar file1 file2
  54. .Nm diff
  55. .Op Fl abditw
  56. .Op Fl I Ar pattern
  57. .Fl D Ar string
  58. .Ar file1 file2
  59. .Nm diff
  60. .Op Fl abdipTtw
  61. .Op Fl I Ar pattern
  62. .Op Fl L Ar label
  63. .Fl U Ar number
  64. .Ar file1 file2
  65. .Nm diff
  66. .Op Fl abdiNPprsTtw
  67. .Oo
  68. .Fl c | e | f |
  69. .Fl n | q | u
  70. .Oc
  71. .Op Fl I Ar pattern
  72. .Bk -words
  73. .Op Fl L Ar label
  74. .Op Fl S Ar name
  75. .Op Fl X Ar file
  76. .Op Fl x Ar pattern
  77. .Ek
  78. .Ar dir1 dir2
  79. .Sh DESCRIPTION
  80. The
  81. .Nm
  82. utility compares the contents of
  83. .Ar file1
  84. and
  85. .Ar file2
  86. and writes to the standard output the list of changes necessary to
  87. convert one file into the other.
  88. No output is produced if the files are identical.
  89. .Pp
  90. Output options (mutually exclusive):
  91. .Bl -tag -width Ds
  92. .It Fl C Ar number
  93. Like
  94. .Fl c
  95. but produces a diff with
  96. .Ar number
  97. lines of context.
  98. .It Fl c
  99. Produces a diff with 3 lines of context.
  100. With
  101. .Fl c
  102. the output format is modified slightly:
  103. the output begins with identification of the files involved and
  104. their creation dates and then each change is separated
  105. by a line with fifteen
  106. .Li * Ns 's .
  107. The lines removed from
  108. .Ar file1
  109. are marked with
  110. .Sq \-\ \& ;
  111. those added to
  112. .Ar file2
  113. are marked
  114. .Sq +\ \& .
  115. Lines which are changed from one file to the other are marked in
  116. both files with
  117. .Sq !\ \& .
  118. Changes which lie within 3 lines of each other are grouped together on
  119. output.
  120. .It Fl D Ar string
  121. Creates a merged version of
  122. .Ar file1
  123. and
  124. .Ar file2
  125. on the standard output, with C preprocessor controls included so that
  126. a compilation of the result without defining
  127. .Ar string
  128. is equivalent to compiling
  129. .Ar file1 ,
  130. while defining
  131. .Ar string
  132. will yield
  133. .Ar file2 .
  134. .It Fl e
  135. Produces output in a form suitable as input for the editor utility,
  136. .Xr ed 1 ,
  137. which can then be used to convert file1 into file2.
  138. .Pp
  139. Extra commands are added to the output when comparing directories with
  140. .Fl e ,
  141. so that the result is a
  142. .Xr sh 1
  143. script for converting text files which are common to the two directories
  144. from their state in
  145. .Ar dir1
  146. to their state in
  147. .Ar dir2 .
  148. .It Fl f
  149. Identical output to that of the
  150. .Fl e
  151. flag, but in reverse order.
  152. It cannot be digested by
  153. .Xr ed 1 .
  154. .It Fl n
  155. Produces a script similar to that of
  156. .Fl e ,
  157. but in the opposite order and with a count of changed lines on each
  158. insert or delete command.
  159. This is the form used by
  160. .Xr rcsdiff 1 .
  161. .It Fl q
  162. Just print a line when the files differ.
  163. Does not output a list of changes.
  164. .It Fl U Ar number
  165. Like
  166. .Fl u
  167. but produces a diff with
  168. .Ar number
  169. lines of context.
  170. .It Fl u
  171. Produces a
  172. .Em unified
  173. diff with 3 lines of context.
  174. A unified diff is similar to the context diff produced by the
  175. .Fl c
  176. option.
  177. However, unlike with
  178. .Fl c ,
  179. all lines to be changed (added and/or removed) are present in
  180. a single section.
  181. .El
  182. .Pp
  183. Comparison options:
  184. .Bl -tag -width Ds
  185. .It Fl a
  186. Treat all files as ASCII text.
  187. Normally
  188. .Nm
  189. will simply print
  190. .Dq Binary files ... differ
  191. if files contain binary characters.
  192. Use of this option forces
  193. .Nm
  194. to produce a diff.
  195. .It Fl b
  196. Causes trailing blanks (spaces and tabs) to be ignored, and other
  197. strings of blanks to compare equal.
  198. .It Fl d
  199. Try very hard to produce a diff as small as possible.
  200. This may consume a lot of processing power and memory when processing
  201. large files with many changes.
  202. .It Fl I Ar pattern
  203. Ignores changes, insertions, and deletions whose lines match the
  204. extended regular expression
  205. .Ar pattern .
  206. Multiple
  207. .Fl I
  208. patterns may be specified.
  209. All lines in the change must match some pattern for the change to be
  210. ignored.
  211. See
  212. .Xr re_format 7
  213. for more information on regular expression patterns.
  214. .It Fl i
  215. Ignores the case of letters.
  216. E.g.,
  217. .Dq A
  218. will compare equal to
  219. .Dq a .
  220. .It Fl L Ar label
  221. Print
  222. .Ar label
  223. instead of the first (and second, if this option is specified twice)
  224. file name and time in the context or unified diff header.
  225. .It Fl p
  226. With unified and context diffs, show with each change
  227. the first 40 characters of the last line before the context beginning
  228. with a letter, an underscore or a dollar sign.
  229. For C source code following standard layout conventions, this will
  230. show the prototype of the function the change applies to.
  231. .It Fl T
  232. Print a tab rather than a space before the rest of the line for the
  233. normal, context or unified output formats.
  234. This makes the alignment of tabs in the line consistent.
  235. .It Fl t
  236. Will expand tabs in output lines.
  237. Normal or
  238. .Fl c
  239. output adds character(s) to the front of each line which may screw up
  240. the indentation of the original source lines and make the output listing
  241. difficult to interpret.
  242. This option will preserve the original source's indentation.
  243. .It Fl w
  244. Is similar to
  245. .Fl b
  246. but causes whitespace (blanks and tabs) to be totally ignored.
  247. E.g.,
  248. .Dq if (\ \&a == b \&)
  249. will compare equal to
  250. .Dq if(a==b) .
  251. .El
  252. .Pp
  253. Directory comparison options:
  254. .Bl -tag -width Ds
  255. .It Fl N
  256. If a file is found in only one directory, act as if it was found in the
  257. other directory too but was of zero size.
  258. .It Fl P
  259. If a file is found only in
  260. .Ar dir2 ,
  261. act as if it was found in
  262. .Ar dir1
  263. too but was of zero size.
  264. .It Fl r
  265. Causes application of
  266. .Nm
  267. recursively to common subdirectories encountered.
  268. .It Fl S Ar name
  269. Re-starts a directory
  270. .Nm
  271. in the middle, beginning with file
  272. .Ar name .
  273. .It Fl s
  274. Causes
  275. .Nm
  276. to report files which are the same, which are otherwise not mentioned.
  277. .It Fl X Ar file
  278. Exclude files and subdirectories from comparison whose basenames match
  279. lines in
  280. .Ar file .
  281. Multiple
  282. .Fl X
  283. options may be specified.
  284. .It Fl x Ar pattern
  285. Exclude files and subdirectories from comparison whose basenames match
  286. .Ar pattern .
  287. Patterns are matched using shell-style globbing as described in
  288. .Xr glob 7 .
  289. Multiple
  290. .Fl x
  291. options may be specified.
  292. .El
  293. .Pp
  294. If both arguments are directories,
  295. .Nm
  296. sorts the contents of the directories by name, and then runs the
  297. regular file
  298. .Nm
  299. algorithm, producing a change list,
  300. on text files which are different.
  301. Binary files which differ,
  302. common subdirectories, and files which appear in only one directory
  303. are described as such.
  304. In directory mode only regular files and directories are compared.
  305. If a non-regular file such as a device special file or FIFO
  306. is encountered, a diagnostic message is printed.
  307. .Pp
  308. If only one of
  309. .Ar file1
  310. and
  311. .Ar file2
  312. is a directory,
  313. .Nm
  314. is applied to the non-directory file and the file contained in
  315. the directory file with a filename that is the same as the
  316. last component of the non-directory file.
  317. .Pp
  318. If either
  319. .Ar file1
  320. or
  321. .Ar file2
  322. is
  323. .Sq - ,
  324. the standard input is
  325. used in its place.
  326. .Ss Output Style
  327. The default (without
  328. .Fl e ,
  329. .Fl c ,
  330. or
  331. .Fl n
  332. .\" -C
  333. options)
  334. output contains lines of these forms, where
  335. .Va XX , YY , ZZ , QQ
  336. are line numbers respective of file order.
  337. .Pp
  338. .Bl -tag -width "XX,YYcZZ,QQ" -compact
  339. .It Li XX Ns Ic a Ns Li YY
  340. At (the end of) line
  341. .Va XX
  342. of
  343. .Ar file1 ,
  344. append the contents
  345. of line
  346. .Va YY
  347. of
  348. .Ar file2
  349. to make them equal.
  350. .It Li XX Ns Ic a Ns Li YY,ZZ
  351. Same as above, but append the range of lines,
  352. .Va YY
  353. through
  354. .Va ZZ
  355. of
  356. .Ar file2
  357. to line
  358. .Va XX
  359. of file1.
  360. .It Li XX Ns Ic d Ns Li YY
  361. At line
  362. .Va XX
  363. delete
  364. the line.
  365. The value
  366. .Va YY
  367. tells to which line the change would bring
  368. .Ar file1
  369. in line with
  370. .Ar file2 .
  371. .It Li XX,YY Ns Ic d Ns Li ZZ
  372. Delete the range of lines
  373. .Va XX
  374. through
  375. .Va YY
  376. in
  377. .Ar file1 .
  378. .It Li XX Ns Ic c Ns Li YY
  379. Change the line
  380. .Va XX
  381. in
  382. .Ar file1
  383. to the line
  384. .Va YY
  385. in
  386. .Ar file2 .
  387. .It Li XX,YY Ns Ic c Ns Li ZZ
  388. Replace the range of specified lines with the line
  389. .Va ZZ .
  390. .It Li XX,YY Ns Ic c Ns Li ZZ,QQ
  391. Replace the range
  392. .Va XX , Ns Va YY
  393. from
  394. .Ar file1
  395. with the range
  396. .Va ZZ , Ns Va QQ
  397. from
  398. .Ar file2 .
  399. .El
  400. .Pp
  401. These lines resemble
  402. .Xr ed 1
  403. subcommands to convert
  404. .Ar file1
  405. into
  406. .Ar file2 .
  407. The line numbers before the action letters pertain to
  408. .Ar file1 ;
  409. those after pertain to
  410. .Ar file2 .
  411. Thus, by exchanging
  412. .Ic a
  413. for
  414. .Ic d
  415. and reading the line in reverse order, one can also
  416. determine how to convert
  417. .Ar file2
  418. into
  419. .Ar file1 .
  420. As in
  421. .Xr ed 1 ,
  422. identical
  423. pairs (where num1 = num2) are abbreviated as a single
  424. number.
  425. .Sh FILES
  426. .Bl -tag -width /tmp/diff.XXXXXXXX -compact
  427. .It Pa /tmp/diff. Ns Ar XXXXXXXX
  428. Temporary file used when comparing a device or the standard input.
  429. Note that the temporary file is unlinked as soon as it is created
  430. so it will not show up in a directory listing.
  431. .El
  432. .Sh EXIT STATUS
  433. The
  434. .Nm
  435. utility exits with one of the following values:
  436. .Pp
  437. .Bl -tag -width Ds -offset indent -compact
  438. .It 0
  439. No differences were found.
  440. .It 1
  441. Differences were found.
  442. .It >1
  443. An error occurred.
  444. .El
  445. .Sh SEE ALSO
  446. .Xr cmp 1 ,
  447. .Xr comm 1 ,
  448. .Xr diff3 1 ,
  449. .Xr ed 1 ,
  450. .Xr patch 1 ,
  451. .Xr sdiff 1
  452. .Rs
  453. .%A James W. Hunt
  454. .%A M. Douglas McIlroy
  455. .%T "An Algorithm for Differential File Comparison"
  456. .%I AT&T Bell Laboratories
  457. .%J Computing Science Technical Report
  458. .%N 41
  459. .%D June 1976
  460. .Re
  461. .Sh STANDARDS
  462. The
  463. .Nm
  464. utility is compliant with the
  465. .St -p1003.1-2008
  466. specification.
  467. .Pp
  468. The flags
  469. .Op Fl aDdIiLNnPpqSsTtwXx
  470. are extensions to that specification.
  471. .Sh HISTORY
  472. A
  473. .Nm
  474. command appeared in
  475. .At v5 .