ID3FS: use File::Find to recursively add files
[id3fs.git] / bin / id3fs
1 #!/usr/bin/perl -w
2 # Ian Beckwith <ianb@erislabs.net>
3 #
4
5 use lib '/home/ianb/projects/id3fs/id3fs/lib';
6 use strict;
7 use Getopt::Long qw(Configure);
8 use ID3FS::DB;
9 use File::Find;
10 use vars qw($me);
11 $me=($0=~/(?:.*\/)?(.*)/)[0];
12
13 my $verbose=0;
14 my $help=0;
15 my $init=0;
16 my @extensions=qw(mp3 ogg flac);
17 Configure(qw(bundling no_ignore_case));
18 my $optret=GetOptions(
19     "verbose|v"  => \$verbose,
20     "quiet|q"    => sub { $verbose=0; },
21     "help|h"     => \$help,
22     "extensions|e=s" => sub { @extensions=split(/\s+|\s*,\s*/, $_[1]); },
23     "init|i"     => \$init,
24     );
25
26 usage() if(!@ARGV || !$optret || $help);
27
28 my $path=shift;
29 my $db=ID3FS::DB->new($path, $init, $me);
30
31 File::Find::find( {wanted => \&wanted, follow => 1, no_chdir => 1}, $path);
32
33 sub wanted
34 {
35     my $ext='';
36     if(/.*\.(.*)/) { $ext=lc($1); }
37     if(-d)
38     {
39         print("$_\n") if $verbose;
40     }
41     elsif(-f && scalar(grep({ $ext eq lc($_);} @extensions)))
42     {
43         $db->add($_);
44     }
45 }
46
47 sub usage
48 {
49     die("Usage: $me [-v] [-q] [-h] [--] file...\n".
50         " -v\tVerbose\n".
51         " -q\tQuiet (default)\n".
52         " -h\tThis help\n".
53         " --\tEnd of options\n");
54 }
55
56 __END__
57
58
59 =head1 NAME
60
61 program - description
62
63 =head1 SYNOPSIS
64
65 B<> [I<-v>] [I<-q>] [I<-h>] [I<file>...]
66
67 =head1 DESCRIPTION
68
69 =head1 OPTIONS
70
71 =over 4
72
73 =item B<-v>
74
75 Enable verbose operation.
76
77 =item B<-q>
78
79 Quiet (no output). This is the default.
80
81 =item B<-h>
82
83 Show a short help message.
84
85 =item B<-->
86
87 End of options.
88
89 =back
90
91 =head1 FILES
92
93 =head1 ENVIRONMENT
94
95 =head1 DIAGNOSTICS
96
97 =head1 BUGS
98
99 None known. Please report any found to ianb@erislabs.net
100
101 =head1 SEE ALSO
102
103 =head1 AUTHOR
104
105 Ian Beckwith <ianb@erislabs.net>
106
107 =head1 AVAILABILITY
108
109 The latest version can be found at:
110
111 B<http://erislabs.net/ianb/projects/id3fs/>
112
113 =head1 COPYRIGHT
114
115 Copyright 2010 Ian Beckwith <ianb@erislabs.net>
116
117 This program is free software: you can redistribute it and/or modify
118 it under the terms of the GNU General Public License as published by
119 the Free Software Foundation; either version 3 of the License, or
120 (at your option) any later version.
121
122 This program is distributed in the hope that it will be useful,
123 but WITHOUT ANY WARRANTY; without even the implied warranty of
124 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
125 GNU General Public License for more details.
126
127 You should have received a copy of the GNU General Public License
128 along with this program.  If not, see <http://www.gnu.org/licenses/>.
129
130 =cut