Reputation: 325
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
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
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
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
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