-.TH "FINDDUP" "1.0" "Mar 2010" "Francois Fleuret" "User Commands"
+.TH "FINDDUP" "1.1" "Mar 2010" "Francois Fleuret" "User Commands"
\" This man page was written by Francois Fleuret <francois@fleuret.org>
\" and is distributed under a Creative Commons Attribution-Share Alike
ignore empty files
.TP
\fB-c\fR, \fB--hide-matchings\fR
-do not show which files from DIR2 corresponds to files from DIR1
+do not show which files from DIR2 correspond to files from DIR1
(hence, show only the files from DIR1 which have an identical twin in
DIR2)
.TP
\fB-g\fR, \fB--no-group-ids\fR
do not show the file group IDs
.TP
+\fB-t\fR, \fB--time-sort\fR
+sort files in each group according to the modification times
+.TP
\fB-p\fR, \fB--show-progress\fR
show progress information in stderr
.TP
*
*/
-#define VERSION_NUMBER "1.0"
+#define VERSION_NUMBER "1.1"
#define _BSD_SOURCE
two files with same inode will
always be false */
+int sort_by_time = 0; /* 1 means to sort files in each group according
+ to the modification time */
+
/********************************************************************/
/* malloc with error checking. */
struct file_node *next;
char *name;
size_t size;
+ time_t atime, mtime, ctime;
ino_t inode;
int group_id; /* one per identical file content */
int dir_id; /* 1 for DIR1, and 2 for DIR2 */
tmp->next = tail;
tmp->name = strdup(name);
tmp->size = sb.st_size;
+ tmp->atime = sb.st_atime;
+ tmp->mtime = sb.st_mtime;
+ tmp->ctime = sb.st_ctime;
tmp->inode = sb.st_ino;
tmp->group_id = -1;
tmp->dir_id = -1;
} else if((*f1)->group_id > (*f2)->group_id) {
return 1;
} else {
- if((*f1)->dir_id < (*f2)->dir_id) {
- return -1;
- } else if((*f1)->dir_id > (*f2)->dir_id) {
- return 1;
+ if(sort_by_time) {
+ if((*f1)->mtime < (*f2)->mtime) {
+ return -1;
+ } else if((*f1)->mtime > (*f2)->mtime) {
+ return 1;
+ } else {
+ return 0;
+ }
} else {
- return 0;
+ if((*f1)->dir_id < (*f2)->dir_id) {
+ return -1;
+ } else if((*f1)->dir_id > (*f2)->dir_id) {
+ return 1;
+ } else {
+ return 0;
+ }
}
}
}
fprintf(out, " -c, --hide-matchings do not show which files in DIR2 corresponds to\n");
fprintf(out, " those in DIR1\n");
fprintf(out, " -g, --no-group-ids do not show the file groups\n");
+ fprintf(out, " -t, --time-sort sort according to modification time in each group\n");
fprintf(out, " -p, --show-progress show progress\n");
fprintf(out, " -r, --real-paths show the real file paths\n");
fprintf(out, " -i, --same-inodes-are-different\n");
{ "real-paths", no_argument, 0, 'r' },
{ "hide-matchings", no_argument, 0, 'c' },
{ "no-group-ids", no_argument, 0, 'g' },
+ { "time-sort", no_argument, 0, 't' },
{ "ignore-dots", no_argument, 0, 'd' },
{ "ignore-empty", no_argument, 0, '0' },
{ "show-progress", no_argument, 0, 'p' },
setlocale (LC_ALL, "");
- while ((c = getopt_long(argc, argv, "hircgd0pm",
+ while ((c = getopt_long(argc, argv, "hircgtd0pm",
long_options, NULL)) != -1) {
switch (c) {
show_groups = 0;
break;
+ case 't':
+ sort_by_time = 1;
+ break;
+
case 'p':
show_progress = 1;
break;