traverse a directory and subdirectories to find files ' properties

Discussion in 'Perl' started by Thieum22, Aug 6, 2004.

  1. Thieum22

    Thieum22 Guest

    Hi,

    I try to go through a directory and it's subdirectories to reah the
    properties of each files. But I have a problem to set active the
    directory where the files are, in order to display their properties.

    If anyone know how to improve my method, or know a better one, he's
    welcome :)

    Thanks,

    Matthieu

    here is the code :

    #! /usr/bin/perl

    use File::Find;

    $dir_tree = '/tmp'; #test directory
    # A good way to go through the subdirectories
    finddepth(\&ren_dir, $dir_tree);

    sub ren_dir {
    next unless (-d);
    print "where are we : ";
    print($_ );
    print "\n";

    # We set the homedir
    opendir(HOMEDIR, $_) || die("unable to open directory");
    # chdir ($_); # make the program active only in the first
    directory parsed -> why not the other ones ?
    print "* we are in a directory";
    print "\n";
    while($filename = readdir(HOMEDIR))
    {
    if ($filename ne "." && $filename ne "..")
    {
    #we are testingif it is a file
    if (-f $filename) {
    print "* we've find a file";
    print "\n";

    print($filename);
    print "\n";
    # file properties
    $mtime = 0;
    $size = 0;
    ($dev, $ino, $mode, $nlink, $uid,
    $gid, $rdev, $size, $atime, $mtime, $ctime, $blksize, $blocks) = stat
    $filename;
    print " for example : last time
    modified : ";
    print($mtime);
    print "\n";

    }

    }
    }
    closedir(HOMEDIR);
    }
     
    Thieum22, Aug 6, 2004
    #1
    1. Advertising

  2. Thieum22

    Joe Smith Guest

    Thieum22 wrote:

    > Hi,
    >
    > I try to go through a directory and it's subdirectories to reah the
    > properties of each files. But I have a problem to set active the
    > directory where the files are, in order to display their properties.
    >
    > If anyone know how to improve my method, or know a better one, he's
    > welcome :)


    Don't use opendir() and readdir(); let find() do that for you.

    linux% find2perl /tmp -ls >find_example.pl
    linux% perl find_example.pl
    linux% cat find_example.pl

    Note where it is using $File::Find::name, which is the combination
    of $File::Find::dir and $_.
    -Joe
     
    Joe Smith, Aug 6, 2004
    #2
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.

Share This Page