mr.dunstan has asked for the wisdom of the Perl Monks concerning the following question:

I'm sure the solution to this problem is going to be really obvious, or not very obvious at all ...

I'm writing a batch process that needs to pluck the most-recently-created file from a directory on a remote machine ... copying the file is no problem ( because I can exec scp or whatever ) - the problem is -IDENTIFYING- the file.

Each file in this dir has a unique name - like FILENAME.$timestamp.TXT - but timestamp is in epoch seconds and is very difficult to predict exactly what the value of $timestamp will be on a given day (this is a file pushed to us by one of our partners.)

SO - is there a way I can simply identify the most recently created file on this remote machine in a secure way? I have to use ssh and scp to do it ... can't make it available on the network any other way ...



-mr.dunstan

Replies are listed 'Best First'.
Re: ssh/scp most recent file?
by wog (Curate) on Sep 19, 2001 at 23:18 UTC
    SSH usually gives you full access to a shell, thus all the commands you can use from the command line should be avialable. Therefore, you can use something like ls to look at all filenames in a directory and choose the most recent name from them, or search the output of ls, etc. (with the appropriate options) to find the file with the latest timestamp. Or you might be able to run perl on the machine through SSH to do this task for you and return the filename over SSH to your script.

    You may want to look at the modules Net::SSH, Net::SCP, Net::SSH::Perl, IPC::Open2, and/or IPC::Open3. (The latter two help you open a multidirectional pipe to a program, the first two are interfaces to the ssh and scp command line programs, and Net::SSH::Perl is SSH implemented in perl.)

Re: ssh/scp most recent file?
by foogod (Friar) on Sep 20, 2001 at 00:45 UTC

    obviously you will use one of the above options Net::SSH works well for me to execute a remote operation ... then the best way I have found is ...

    #!perl my $dir = "/home/foogod"; my @array = `ls -ut $dir`; print "$array[0]";

    This will print the latest modified/created file ...

    - f o o g o d

Re: ssh/scp most recent file?
by perrin (Chancellor) on Sep 19, 2001 at 23:37 UTC
    You should take a look at rsync. It can sync a local directory and a remote one over an SSH connection.