DIFF(1plan9)
β¨ NAME β¨
diff β the differential file comparator, aka the little gremlin that tells you exactly which lines gotta change so two files finally agree on something π
πΈ SYNOPSIS πΈ
diff [ -acefmnbwr ] file1 ... file2
π DESCRIPTION π
Okay bestie, listen. diff tells you what lines must be changed in two files to bring them into agreement. That's it. That's the whole job. Matchmaker energy but for text files π«Ά
Now the plot twists:
- If one file is a directory, then a file in that directory with basename the same as that of the other file is used. Sneaky, right?
- If both files are directories, similarly named files in the two directories are compared by the method of
difffor text files andcmp(1)otherwise. (Shoutoutcmp(1), our binary bestie.) - If more than two file names are given, then each argument is compared to the last argument as above. The last one is literally the main character and everyone else is compared to it π
π The flags, one by one π
-rβ causesdiffto process similarly named subdirectories recursively. It goes deep. π³οΈ-mβ when you're processing more than one file,diffprefixes file differences with a single line listing the two differing files, in the form of adiffcommand line. The-mflag causes this behavior even when processing single files. No cap.-bβ causes trailing blanks (spaces and tabs) to be ignored and other strings of blanks to compare equal. Basically it's not gonna fight you over invisible characters. So chill of it.-wβ causes all white-space to be removed from input lines before applying the difference algorithm. Not "compared loosely" β removed. Gone. Deleted. π-nβ prefixes each range withfile:and inserts a space around thea,c, anddverbs. Tiny little formatting glow-up β¨-eβ produces a script ofa,canddcommands for the editored, which will recreatefile2fromfile1. Time machine behavior, lowkey.-fβ produces a similar script, not useful withed, in the opposite order. It may, however, be useful as input to a stream-oriented post-processor. Different vibe, still valid π¦-cβ includes three lines of context around each change, merging changes whose contexts overlap. Three. Lines. Of. Context. Cozy.-aβ displays the entire file as context. All of it. Every single line. It said "no secrets" π
π The normal output π
The normal output contains lines of these forms:
n1 a n3,n4
n1,n2 d n3
n1,n2 c n3,n4
These lines resemble ed commands to convert file1 into file2. The numbers after the letters pertain to file2. In fact, by exchanging a for d and reading backward one may ascertain equally how to convert file2 into file1. Reversible!!! The way that this is a two-way street π
As in ed, identical pairs where n1 = n2 or n3 = n4 are abbreviated as a single number. Efficiency icon.
Following each of these lines come all the lines that are affected in the first file flagged by <, then all the lines that are affected in the second file flagged by >. < = the old one, > = the new one, iykyk π
π One more thing: except in rare circumstances, diff finds a smallest sufficient set of file differences. It's not just doing stuff β it's doing the minimum. Ate. Periodt.
ποΈ FILES ποΈ
/tmp/diff[12]β yes, both of them, it's a whole duo π§
π§΅ SOURCE π§΅
/src/cmd/diff β the origin story, right there.
π SEE ALSO π
Go read them, they're the friend group πΈ
π©Ί DIAGNOSTICS π©Ί
Exit status is the empty string for no differences, for some, and for trouble.
Yeah bestie that's literally what it says. All three cases. Empty string. We don't make the rules, we just report them π
π BUGS π
- Editing scripts produced under the
-eor-foption are naive about creating lines consisting of a single.β like, they just do not handle that. Watch out π - When running
diffon directories, the notion of what is a text file is open to debate. Philosophical king behavior honestly π
and that's the whole page, bestie π this was diff(1plan9) β section 1 of the Plan 9 manual, brought to you by the good people who wrote it way back when, in all its /src/cmd/diff glory. mwah π«Ά
π¦ where this page comes from
- debian bookworm: 9base 1:6-13 Β· Lucent
- debian trixie: 9base 1:6-14 Β· Lucent
- ubuntu jammy: 9base 1:6-11 Β· Lucent
- ubuntu noble: 9base 1:6-14 Β· Lucent
- ubuntu questing: 9base 1:6-15
- ubuntu resolute: 9base 1:6-15build1 Β· Lucent
- ubuntu stonking: 9base 1:6-15build1 Β· Lucent
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms