我只有一个文件名 myfile.txt
,但不确定它保存在哪里。如何获取该文件所存储的完整路径?
我已经尝试过:
$string=`ls /abc/def/*/*/*/*/myfile.txt`;
结果:完整路径为/abc/def/ghi/jkl/mno/pqr/myfile.txt
我可以通过运行上面的Perl脚本使用shell命令
来获取完整路径。然而,这需要很长时间才能返回路径。有没有一种使用Perl查找文件完整路径的方法?
我只有一个文件名 myfile.txt
,但不确定它保存在哪里。如何获取该文件所存储的完整路径?
我已经尝试过:
$string=`ls /abc/def/*/*/*/*/myfile.txt`;
结果:完整路径为/abc/def/ghi/jkl/mno/pqr/myfile.txt
我可以通过运行上面的Perl脚本使用shell命令
来获取完整路径。然而,这需要很长时间才能返回路径。有没有一种使用Perl查找文件完整路径的方法?
如果myfile.txt
实际上是指向该文件的相对路径,那么有一个核心模块可用于处理这个问题 - File::Spec->rel2abs():
use File::Spec;
...
my $rel_path = 'myfile.txt';
my $abs_path = File::Spec->rel2abs( $rel_path ) ;
如果你真的需要在目录中搜索那个文件,可以使用File::Find...但是我建议使用shell命令find / -name myfile.txt -print
。
rel2abs
实际上并没有尝试查找那个文件。你觉得使用我给出的 find
命令怎么样?或者你需要严格的 Perl 解决方案吗?)那么 File::Find
就是正确的选择。 - raina77ow您应该使用Perl模块Cwd来完成此操作。链接中还有一个示例,如下所示。
#!/usr/bin/perl
use Cwd;
my $dir = getcwd;
use Cwd 'abs_path';
my $abs_path = abs_path($file);
$start_path = "/abc/def/";
@files = <$start_path*/myfile.txt>
foreach $file(@files) {
print $file; # Prints the full path of the file.
}
/abc/def/*/myfile.txt
,在大多数情况下,它只会查找def
下的一级目录。看起来OP不知道它可能有多少级别的子目录。 - brian d foy在Linux中,使用pwd
而不是cd
来获取当前目录的路径,无需函数。
$path='cd';
$path =~ tr /\\/\//;
chomp($path);
print "$path";