* Test program for find files
*/
+/*
+ Copyright (C) 2000-2003 Kern Sibbald and John Walker
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of
+ the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public
+ License along with this program; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ MA 02111-1307, USA.
+
+ */
+
#include "bacula.h"
#include "findlib/find.h"
-#include "jcr.h"
/* Global variables */
static int trunc_path = 0;
static int attrs = 0;
+static JCR *jcr;
static int print_file(FF_PKT *ff, void *pkt);
static void count_files(FF_PKT *ff);
"Usage: testfind [-d debug_level] [-] [pattern1 ...]\n"
" -a print extended attributes (Win32 debug)\n"
" -dnn set debug level to nn\n"
+" -e specify file of exclude patterns\n"
+" -i specify file of include patterns\n"
" - read pattern(s) from stdin\n"
" -? print this message.\n"
"\n"
-"Patterns are file inclusion -- normally directories.\n"
+"Patterns are used for file inclusion -- normally directories.\n"
"Debug level >= 1 prints each file found.\n"
"Debug level >= 10 prints path/file for catalog.\n"
-"Errors always printed.\n"
-"Files/paths truncated is number with len > 255.\n"
-"Truncation is only in catalog.\n"
+"Errors are always printed.\n"
+"Files/paths truncated is the number of files/paths with len > 255.\n"
+"Truncation is only in the catalog.\n"
"\n"));
exit(1);
FF_PKT *ff;
char name[1000];
int i, ch, hard_links;
+ char *inc = NULL;
+ char *exc = NULL;
+ FILE *fd;
- while ((ch = getopt(argc, argv, "ad:?")) != -1) {
+ while ((ch = getopt(argc, argv, "ad:e:i:?")) != -1) {
switch (ch) {
case 'a': /* print extended attributes *debug* */
attrs = 1;
}
break;
+ case 'e': /* exclude patterns */
+ exc = optarg;
+ break;
+
+ case 'i': /* include patterns */
+ inc = optarg;
+ break;
+
case '?':
default:
usage();
argc -= optind;
argv += optind;
- ff = init_find_files();
- if (argc == 0) {
- add_fname_to_include_list(ff, 0, "/"); /* default to / */
- } else {
+ jcr = new_jcr(sizeof(JCR), NULL);
+
+ ff = init_find_files();
+ if (argc == 0 && !inc) {
+ add_fname_to_include_list(ff, 0, "/"); /* default to / */
+ } else {
for (i=0; i < argc; i++) {
- if (strcmp(argv[i], "-") == 0) {
- while (fgets(name, sizeof(name)-1, stdin)) {
- strip_trailing_junk(name);
- add_fname_to_include_list(ff, 0, name);
- }
- continue;
- }
- add_fname_to_include_list(ff, 0, argv[i]);
- }
- }
+ if (strcmp(argv[i], "-") == 0) {
+ while (fgets(name, sizeof(name)-1, stdin)) {
+ strip_trailing_junk(name);
+ add_fname_to_include_list(ff, 0, name);
+ }
+ continue;
+ }
+ add_fname_to_include_list(ff, 0, argv[i]);
+ }
+ }
+ if (inc) {
+ fd = fopen(inc, "r");
+ if (!fd) {
+ printf("Could not open include file: %s\n", inc);
+ exit(1);
+ }
+ while (fgets(name, sizeof(name)-1, fd)) {
+ strip_trailing_junk(name);
+ add_fname_to_include_list(ff, 0, name);
+ }
+ fclose(fd);
+ }
- find_files(ff, print_file, NULL);
- hard_links = term_find_files(ff);
+ if (exc) {
+ fd = fopen(exc, "r");
+ if (!fd) {
+ printf("Could not open exclude file: %s\n", exc);
+ exit(1);
+ }
+ while (fgets(name, sizeof(name)-1, fd)) {
+ strip_trailing_junk(name);
+ add_fname_to_exclude_list(ff, name);
+ }
+ fclose(fd);
+ }
+ find_files(jcr, ff, print_file, NULL);
+ hard_links = term_find_files(ff);
printf(_("\
Total files : %d\n\
num_files, max_file_len, max_path_len,
trunc_fname, trunc_path, hard_links);
+ free_jcr(jcr);
close_memory_pool();
sm_dump(False);
exit(0);