Thanks for the reply. I tried it out and it merely copies the file from one directory to another, rather than to a directory named for the author: in this case from
my $source_dir = '/usr/blah'; to
my $distin_dir = '/usr/blany/blanagain/';

with output like this:

Copying /usr/blah/htdocs/media/events/blah06/epic_struggle/mp3/ cuchailain.mp3-> /home/messmer/test/fake_mp3dir/cuchailain.mp3

instead of
Copying /usr/blah/htdocs/media/events/blah06/epic_struggle/mp3/ cuchailain.mp3-> /home/messmer/test/fake_mp3dir/cuchailain/ cuchailain.mp3

In other words, there will be a directory full of mp3s like:
/usr/whatever/cuchailain.mp3
/usr/whatever/ulysses.mp3
/usr/whatever/beowulf.mp3
/usr/whatever/Sigurðr,mp3 (Ok, i'd need unicode for that one, never mind...)

and I want to copy them into already existing directories like
/home/messmer/mp3s/cuchailain/
/home/messmer/mp3s/ulysses/
/home/messmer/mp3s/beowulf/


Maybe I missed some nuance of your script that would have done this...? I'm just starting out with perl really so please excuse my ignorance.
Thanks!
Tom




On Jan 3, 2007, at 9:25 AM, Beginner wrote:

On 3 Jan 2007 at 8:02, Tom Messmer wrote:

Hello everyone,

Hello and welcome,

Just joined this list and I have a doozie I've been working on for a
bit here to no avail. The entire problem is this; I have a list of
files, say that they are named "flynn.foo, flynn_something.foo,
flaherty.foo flaherty_something.foo" and so forth. Each of these
files must live(be moved to)  an individual directory named for the
author(flynn, flaherty, etc) and then be symlinked to an entirely
different directory in another part of the filesystem identical to
the first one(flynn, flaherty...) If I was doing this on the command
line I'd do

cp /usr/blah/flaherty.foo /usr/blah/blahagain/flaherty/ &&
  ln -s /usr/blah/blahagain/flaherty/flaherty.foo /usr/blah/
blahoncemore/flaherty.foo

  So far I've gotten to the point where I can strip out the  names
from the files and create the two sets of directories, but I'm
stumped on how to them copy each of these files into the correct
directory and then symlink from the storage directory to the other
name directory. Now I know how to copy files and symlink files with
perl, but the logic involved in doing this to 30 files is beyond me
at the moment. Anyone have a clue?


This is a hard one to test. I haven't created the file structure you
described so YOU MUST TEST IT. I think you'll get better suggestions
from the list in time but I thought I'd have a shot anyway (I await
the rebukes).

I'll leave the symlink for you (perldoc -f symlink). Try this... it
might get you started.
Good luck,
Dp.


#!/usr/bin/perl # or where ever your perl is installed.

use strict;
use warnings;
use File::Copy;
use File::Basename;

my $source_dir = '/usr/blah';
my $distin_dir = '/usr/blany/blanagain/';

# Open the dir for reading or die.
opendir(DIR,$source_dir) or die "Can't open $source_dir: $!\n";

# Collect the author directories (and names).
my @auth_dir = grep { -f "$source_dir/$_" } readdir(DIR);

foreach my $i (@auth_dir) {

# Get the filename of the file from /usr/blab/flynn.foo
        my $pathname = "$source_dir/$i";

# Grab the author from flynn.foo, splitting on the period.

# method 1 via regex
        my ($author,$file) = ($i =~ /(\w+)\.(\w+)/);
# method 2 via split
        my @f = split(/\./,$i);


# Going with method 2 for the moment.
        my $dist = $distin_dir.$f[0];
        print "Copying $pathname-> $dist.$f[1]\n";

#Keep commented until your sure.
#       copy($i,$dist) or die "Can't copy $i -> $dist: $!\n";

}

print "Done...\n";






--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/




--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to