Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation
 
PerlMonks  

perlfiles - list all the perl scripts in a directory

by grinder (Bishop)
on Apr 02, 2001 at 14:36 UTC ( #68971=perlcraft: print w/ replies, xml ) Need Help??

   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

Comment on perlfiles - list all the perl scripts in a directory
Download Code

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlcraft [id://68971]
Approved by root
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (12)
As of 2015-07-06 16:23 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (77 votes), past polls