Diff files present in two different directories
Categories:
Comparing Files Across Different Directories with diff

Learn how to effectively use the diff
command in Unix-like systems to identify differences between files residing in separate directories, including recursive comparisons and output formatting.
The diff
command is a powerful utility in Unix-like operating systems used to compare two files or directories. While comparing individual files is straightforward, comparing files that exist in different directory structures requires a slightly different approach. This article will guide you through various methods to achieve this, from basic comparisons to recursive directory analysis, helping you pinpoint discrepancies efficiently.
Basic File Comparison Across Directories
The most direct way to compare two specific files located in different directories is to provide their full or relative paths to the diff
command. This works identically to comparing files within the same directory, as diff
simply needs to know where to find each file.
diff /path/to/dir1/fileA.txt /path/to/dir2/fileB.txt
diff ../dir1/fileA.txt ./dir2/fileB.txt
Comparing two specific files using their full or relative paths.
Recursive Directory Comparison with diff -r
Often, you don't just want to compare two individual files, but rather the entire contents of two directories. The diff
command's -r
(recursive) option is designed for this purpose. It will traverse both directories, comparing files with the same name and reporting differences, as well as files that exist in one directory but not the other.
flowchart TD A["Start Recursive Diff"] --> B{"Compare dir1/fileX and dir2/fileX?"} B -- "Yes, files exist" --> C["Run diff on fileX"] C --> D{"Differences found?"} D -- "Yes" --> E["Report differences"] D -- "No" --> F["No differences"] B -- "No, file only in one dir" --> G["Report 'Only in dirX: fileX'"] E --> H["Continue to next file/subdir"] F --> H G --> H H --> I{"All files/subdirs processed?"} I -- "No" --> B I -- "Yes" --> J["End Recursive Diff"]
Flowchart illustrating the recursive directory comparison process.
diff -r /path/to/directory1 /path/to/directory2
Performing a recursive comparison between two directories.
diff -r
command will output differences for files that exist in both directories, and also list files that are unique to either directory. This provides a comprehensive overview of the discrepancies.Ignoring Common Files and Output Formatting
When comparing directories, you might encounter temporary files, version control directories (like .git
or .svn
), or other files that you wish to exclude from the comparison. The diff
command offers options to ignore such files, making your output cleaner and more focused on relevant changes. You can also control the output format for better readability.
diff -r --exclude='.git' --exclude='*.log' /path/to/dir1 /path/to/dir2
diff -rq /path/to/dir1 /path/to/dir2
diff -u -r /path/to/dir1 /path/to/dir2
Examples of excluding files, quiet comparison, and unified output format.
diff -q
(quiet) to only report when files differ, without showing the actual differences. This is useful for a quick check of whether two directories are identical or not.