In this example, carriage returns (\r) are removed from all files from a top-level directory down.
File extension exceptions may be entered to exclude certain file types (such as images).

Could be used for several reasons!

#!/usr/bin/perl -w # Update: Script should now work without generating # any warnings concering the %skip hash. Thanks to # jmcnamara for helping with that :) # This script will remove carriage returns (\r) from # all files located below a specified parent directory. # Could be expanded to allow any modifications. use strict; use File::Find; use File::Basename; #################################### # Configuration # Directory where recursive modification will begin my $dir = "/home/username/directory"; # File extensions to skip (ie: images) # Each entry has the following look: # 'file extension' => 1 my %skip = ( 'gif' => 1, 'jpg' => 1, 'jpeg' => 1, 'png' => 1 ); #################################### # Main Program - No Need To Edit :) my $count; # Just a counting thing my @dirs; # All recursed directories # This does at least 85% of the work! # It gets a recursive list of all directories find(\&{ sub { if (-d "$File::Find::dir/$_") { if ($count++ == 0) { push @dirs, $File::Find::dir; } else { push @dirs, $File::Find::dir . "/$_"; } } } }, $dir); # Loop through all directories foreach my $curDir (@dirs) { # Get list of files from the directory opendir DIR, $curDir; my @files = readdir DIR; closedir DIR; # Loop through the files foreach my $file (@files) { # Skip directories and "." and ".." entries # as well as excluded file extensions my ($nil,$ext) = $file =~ /^(.*?)\.(.*?)$/gs; $ext = '' unless defined $ext; next if (-d "$curDir/$file" || $file =~ /^\./ || $skip{$ext}); # Read in the file open FILE, "$curDir/$file"; my @lines = <FILE>; close FILE; # Modify and print the file back open FILE, ">$curDir/$file"; print FILE map { s/\r//g; $_; } @lines; close FILE; } }

In reply to Recursive File Substitution by mt2k

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.