--- /dev/null
+.TH "hardlink" "1"
+.SH "NAME"
+hardlink \- Consolidate duplicate files via hardlinks
+.SH "SYNOPSIS"
+.PP
+\fBhardlink\fP [\fB-c\fP] [\fB-n\fP] [\fB-v\fP] [\fB-h\fP] directory1 [ directory2 ... ]
+.SH "DESCRIPTION"
+.PP
+This manual page documents \fBhardlink\fP, a
+program which consolidates duplicate files in one or more directories
+using hardlinks.
+.PP
+\fBhardlink\fP traverses one
+or more directories searching for duplicate files. When it finds duplicate
+files, it uses one of them as the master. It then removes all other
+duplicates and places a hardlink for each one pointing to the master file.
+This allows for conservation of disk space where multiple directories
+on a single filesystem contain many duplicate files.
+.PP
+Since hard links can only span a single filesystem, \fBhardlink\fP
+is only useful when all directories specified are on the same filesystem.
+.SH "OPTIONS"
+.PP
+.IP "\fB-c\fP" 10
+Compare only the contents of the files being considered for consolidation.
+Disregards permission, ownership and other differences.
+.IP "\fB-n\fP" 10
+Do not perform the consolidation; only print what would be changed.
+.IP "\fB-v\fP" 10
+Enable verbose logging.
+.IP "\fB-h\fP" 10
+Show help.
+.SH "AUTHOR"
+.PP
+\fBhardlink\fP was written by Jakub Jelinek <jakub@redhat.com>.
+.PP
+Man page written by Brian Long.
+.PP
+Man page updated by Jindrich Novy <jnovy@redhat.com>
void usage(char *prog)
{
- fprintf (stderr, "Usage: %s [-cnv] directories...\n", prog);
+ fprintf (stderr, "Usage: %s [-cnvh] directories...\n", prog);
fprintf (stderr, " -c When finding candidates for linking, compare only file contents.\n");
fprintf (stderr, " -n Don't actually link anything, just report what would be done.\n");
fprintf (stderr, " -v Operate in verbose mode.\n");
+ fprintf (stderr, " -h Show help.\n");
exit(255);
}
int fd, i;
f * fp, * fp2;
h * hp;
- char *p, *q;
+ char *p = NULL, *q;
char *n1, *n2;
int cksumsize = sizeof(buf);
unsigned int cksum;
d * dp;
DIR *dh;
struct dirent *di;
- while ((ch = getopt (argc, argv, "cnv")) != -1) {
+ while ((ch = getopt (argc, argv, "cnvh")) != -1) {
switch (ch) {
case 'n':
no_link++;
case 'c':
content_only++;
break;
+ case 'h':
default:
usage(argv[0]);
}