open( FIND, "find $dir -print0 |" ) or die "can't run find: $!"; # put any other find options you need between $dir and "-print0" { local $/ = "\0" # use null byte as input record separator while () { chomp; my $name = my $dir = $_; if ( s{(.+)/}{} ) { $dir = $1; else { $dir = "/"; # emulate File::Find's behavior $_ = "." if ( $name eq $dir ); } $borg->( $name, $dir, $_ ); } } close FIND;