Steven
Steven

Reputation: 325

How to get the exact full path to a file in Perl

I only have a file name which is myfile.txt and I am not sure where it is saved. How can I get the exact full path where the file is stored?

I have tried

$string=`ls /abc/def/*/*/*/*/myfile.txt`;

Result: The full path is /abc/def/ghi/jkl/mno/pqr/myfile.txt

I able to get the full path by running shell command using the Perl script above. However, this took very long time to return the path. Is that a way to find the full path of the file by using Perl?

Upvotes: 26

Views: 45268

Answers (4)

R.P
R.P

Reputation: 500

We can look from anywhere on the system, but in this case we're looking from the "/abc/def" folder.

$start_path = "/abc/def/";
@files = <$start_path*/myfile.txt>

foreach $file(@files) {
    print $file; # Prints the full path of the file.
}

Upvotes: 3

Saurabh Jankat
Saurabh Jankat

Reputation: 1

Use pwd instead of cd in Linux to get path of current directory without function,

$path='cd';
$path =~ tr /\\/\//;
chomp($path);
print "$path";

Upvotes: -5

Lipongo
Lipongo

Reputation: 1261

You should use the Perl module Cwd to accomplish this. The link has an example also seen below.

#!/usr/bin/perl 
use Cwd;
my $dir = getcwd;
use Cwd 'abs_path';
my $abs_path = abs_path($file);

Upvotes: 25

raina77ow
raina77ow

Reputation: 106365

Well, if myfile.txt is actually a relative path to that file, there's a core module sub for that - File::Spec->rel2abs():

  use File::Spec;
  ...
  my $rel_path = 'myfile.txt';
  my $abs_path = File::Spec->rel2abs( $rel_path ) ;

... and if you actually need to search through your directories for that file, there's File::Find... but I would go with shell find / -name myfile.txt -print command probably.

Upvotes: 29

Related Questions