Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

Re: remove lines from file ending with / char

by philiprbrenan (Monk)
on Sep 06, 2012 at 00:13 UTC ( #991978=note: print w/ replies, xml ) Need Help??


in reply to remove lines from file ending with / char

Just supposing the problem was to find the smallest set of directories whose removal would not delete any files (the folded comments make it more difficult to read):

use feature ":5.14"; use warnings FATAL => qw(all); use strict; use Data::Dump qw(dump pp); sub findEmptyDirectories(&@) {package FindEmptyDirectories; my $R = shift; # Processing routine from us +er followed by file/directory names my $d = {}; # Simulated directory tree {for(@_) # Load directory tree with e +ach file {if (my @c = /([^\/]+)/g) # Get path components from f +ile name {my $f = pop @c unless /\/\Z/; # Get file name unless direc +tory my $c = $d; # Start of descent through d +irectory tree $c = $c->{dir}{$_} //= {} for @c; # Descend along each path co +mponent adding new nodes as necessary $c->{file}{$f}++ if defined $f; # Count files at this level +with this name } } } sub R($) # Descend tree to count file +s in each directory {my ($d) = @_; # Position in directory tree $d->{files} += &R($d->{dir}{$_}) for keys %{$d->{dir}}; # Count fi +les below this level $d->{files} += keys %{$d->{file}}; # plus files at this level } R($d); # Count files at each level sub r($$$) # Descend tree in in-order i +n order to perform user action on empty directories {my ($R, $d, $p) = @_; # User action, directory sub + tree, path to sub tree return $R->(@$p) unless $d->{files}; # No files below this direct +ory so perform user action and return &r($R, $d->{dir}{$_}, [@$p, $_]) for sort keys %{$d->{dir}}; # Els +e process lower levels in directory tree } r($R, $d, []); # Call user action on direct +ories with no files } findEmptyDirectories {say "/", join("/", @_), "/"} split /\n/, << 'END +'; /peter/john/lilly.pdf /john/peter/jill.pdf /jimmy/gill/a.txt /jimmy/gill/johnny/ /wilbur/yankee/ /wilbur/yankee/aaa/bbb/nnn/ /wilbur/yankee/aaa/ccc/nnn/ /wilbur/yankee/aaa/ccc/aaa.txt /lola/riley/jibmo/txt /lola/riley/jibmo.txt /rolly/polly/quebe.lst END

Produces:

/jimmy/gill/johnny/ /wilbur/yankee/aaa/bbb/ /wilbur/yankee/aaa/ccc/nnn/


Comment on Re: remove lines from file ending with / char
Select or Download Code

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others exploiting the Monastery: (14)
As of 2015-07-28 13:25 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 (254 votes), past polls