如何使用unix管道将ls命令输出到perl脚本中

时间:2013-03-09 21:30:45

标签: perl pipe

我需要获取当前目录中的文件和子目录列表,然后使用perl脚本执行必要的操作。必须使用以下命令:ls -F | perl myfile.pl。问题是如何在perl脚本中达到ls命令的输出。任何帮助表示赞赏。

5 个答案:

答案 0 :(得分:2)

这很简单,只需阅读perl脚本的标准输入:

while(<STDIN>) {
    print "---> $_";  # or whatever you need
}

答案 1 :(得分:2)

如果你写的不是一个沉重的单线程perl脚本,你可以使用“-n”管道标志,这样你就不需要循环输入:

ls -F | perl -ne "print $_;"

答案 2 :(得分:1)

如果您需要将目录的内容交给Perl脚本,最好将文件名作为参数传递。

perl myscript.pl *

则...

for my $file (@ARGV) {
    ...
}

这避免了必须解析ls -F的输出,使您的代码更简单,更快速,更强大和可移植。

可以使用file test operators在Perl中讲述文件的类型。

for my $file (@ARGV) {
    if( -l $file ) {
        ...do something with a symbolic link...
    }
    elsif( -d $file ) {
        ...do something with a directory...
    }
    else {
        ...regular file...
    }
}

答案 3 :(得分:0)

运行该命令并在perl脚本中处理其输出。它与管道的行为相同。

#!/usr/bin/env perl

use warnings;
use strict;

open my $ls, '-|' , 'ls -F' or die;

while ( <$ls> ) { 
    ## Process each line.
}

答案 4 :(得分:0)

ls -F | perl myfile.pl -

我们只需要&#34; - &#34;脚本名称后面的参数。顺便说一句,使用&#34; *&#34;取代&#34; - &#34;不行。