列出Linux和Perl中文件夹的绝对路径

时间:2016-09-09 07:24:51

标签: linux perl shell unix

我有一个文件夹,其中包含两个文件夹,如下所示:

/vobs/code
/vobs/code/item
/vobs/code/image

我想获取它的两个文件夹的绝对路径。在我的perl脚本中,我的代码看起来像这样。

@folder = `cd /vobs/code/item;ls -d $PWD/**`; or 
@folder = `cd /vobs/code/item;ls -d $PWD/*`;

从网上说它有两张外卡,它会显示文件和目录,而一张外卡显示文件夹,但我在控制台试了一下,它还提供文件和文件夹,还有一张外卡。

执行perl脚本后得到的结果是它没有给出/vobs/code里面的文件夹路径。它显示根文件夹路径。我把一个pwd放在cd和ls之间pwd显示它实际上cd到目录并执行下一个命令。

@folder = `cd /vobs/code/item;ls -d $pwd/*`

上面的命令产生与第一个和第二个命令相同的输出,因为pwd是小写,它显示根文件夹路径。

我尝试了readlink -f,但是它需要文件夹名称,否则会提示错误。我可以尝试获取文件名并查找路径并将其加入成为变量但它有点麻烦我会接受它如果我找不到任何解决方案,请作为最后的手段。请帮助谢谢

2 个答案:

答案 0 :(得分:1)

您可以使用glob展开通配符。使用grep过滤列表,-f-d(请参阅-x),分别检查文件和目录。

my @files_and_directories = glob '/vobs/code/*'; 
my @files       = grep -f, @files_and_directories;
my @directories = grep -d, @files_and_directories;

答案 1 :(得分:0)

你考虑过abs_path吗?

use Cwd 'abs_path';
my $base_path = abs_path('vobs/code');
for my $dir ( qw/item image/ ){
   my $path = abs_path(join("/",$base_path,$dir));
   # Ofc, this will only work if vobs/code is in working directory.
   my @files_in_dir = grep{ -f $_ }<$path/*>; # these will be absolute

}