1: #! /usr/bin/perl -w 2: # 3: # david landgren 4: # perlfiles -- print out the names of all perl scripts in the given directories 5: # handy for backticking into vi or grep... 6: 7: =for perlmonks 8: [NB: this was posted in CUFP, which was probably the 9: wrong place so it wound up here. 10: 11: My Perl coding leans more to [id://66379|this] than 12: [isbn://1884777791|that] but I am trying to get out of 13: the habit. 14: 15: Be that as it may, I have a ridiculously simple Perl 16: script that I use dozens of times a day, and no doubt 17: other people will find it useful. It simply prints out 18: the names of all the files in a directory that are perl 19: files. I can use this to backtick the list into <tt>vi</tt> 20: or <tt>grep</tt>. 21: 22: Have fun. 23: =cut 24: 25: use strict; 26: use Getopt::Std; 27: use vars qw/$opt_u/; 28: 29: getopts 'u'; 30: 31: @ARGV = ('.') unless @ARGV; 32: 33: my @files; 34: foreach my $dir( @ARGV ) { 35: opendir D, $dir or die "Cannot open directory $dir: $!\n"; 36: while( defined (my $file = readdir(D)) ) { 37: next if $file eq '.' or $file eq '..'; 38: $file = "$dir/$file"; 39: open IN, $file or next; 40: my $line = <IN>; 41: close IN; 42: if( $line =~ m{^#!\s*/usr/(?:local/)?bin/perl} ) { 43: if( $opt_u ) { 44: print "$file\n"; 45: } 46: else { 47: push @files, $file; 48: } 49: } 50: } 51: closedir D; 52: } 53: exit if $opt_u; 54: 55: local $, = "\n"; 56: print sort(@files), "\n"; 57: 58: =head1 NAME 59: 60: perlfiles 61: 62: =head1 SYNOPSIS 63: 64: B<perlfiles> [B<-u>] [directory] [...] 65: 66: =head1 DESCRIPTION 67: 68: Print the names of all perl scripts in a directory. If 69: no directory is given the current directory is assumed. 70: 71: The script opens each file, and looks at the first line 72: to decide whether it looks like a shebang line that 73: would launch perl. 74: 75: =head1 OPTIONS 76: 77: =over 5 78: 79: =item B<-u> 80: 81: Unsorted. Do not sort the files, rather, print out the 82: filenames in directory order. 83: 84: =back 85: 86: =head1 EXAMPLES 87: 88: C<perlfiles> 89: 90: ./bar 91: ./foo 92: ./rat 93: 94: C<vi `perlfiles`> 95: 96: Edit all the perl files in the current directory. 97: 98: C<vi $(grep -l 'use Socket' $(perlfiles /usr/local/bin))> 99: 100: Edit all the perl files in /usr/local/bin that use the 101: Socket module (assuming a bash- or ksh-like shell). 102: 103: =head1 BUGS 104: 105: Will be fooled by any script that uses a tricky shebang 106: line, or a C<C:\perl\bin\perl.exe> path. In the latter 107: case you probably don't have a real shell, so this 108: script probably isn't of much use (and probably in the 109: former as well for all I know). 110: 111: =head1 COPYRIGHT 112: 113: Copyright (C) 2001 David Landgren. 114: 115: This script is free software; you can redistribute it 116: and/or modify it under the same terms as Perl itself. 117: 118: =head1 AUTHOR 119: 120: David "grinder" Landgren 121: eval {join chr(64) => qw[landgren bpinet.com]} 122: 123: =cut
|
---|
Back to
Craft