1440665 8 drwxrwx--- 2 smithjoe smithjoe 1024 May 29 09:01 .
1960596 8 -rwxrwx--x 1 smithjoe smithjoe 3190 May 29 09:00 ./file1.prl
3197096 8 -rw-rw---- 1 smithjoe smithjoe 1594 May 24 16:11 .dir/documents/file2.prl~
1790401 8 -rw------- 1 smithjoe smithjoe 3205 May 29 09:01 .dir/files/file3.prl
6754401 8 -rw------- 1 smithjoe smithjoe 3205 May 29 09:01 .smithjoe/file3.prl
2737401 8 -rw------- 1 smithjoe smithjoe 3205 May 29 09:01 .smithjoe/folder2
我有一个数组(@file_path),其中包含上面显示的数据。我希望能够从数组中提取文件/目录名称(它是该行的最后一个元素)。我必须使用foreach循环。一旦我这样做。我跳过目录并将它们保存在一个新数组中。我使用push命令附加该数组。
帮帮我。请。
答案 0 :(得分:2)
给你一些提示:
假设文件路径永远不会包含空格,您可以使用split
命令分隔每行上的字段并将它们分配给数组。如果它们可以包含空格,split
会为要返回的最大字段数采用可选的第三个参数。
在Perl中,$array[-1]
会返回@array
中的最后一项。
这两个提示应该允许您从每一行获取文件路径。
答案 1 :(得分:2)
我会重新讨论@ mpapec的评论,你可能想先通过修复你得到的数据来解决这个问题,而不是试图操纵它。另外,我需要在文件名和路径内的空格上加上这个前缀 - 而且我不确定是否有一种好的,可靠的方法来避免不引入其他怪癖,因此建议修复尝试处理之前的数据。
但是,如果您对所拥有的数据感到困惑,并且您确信在文件名/路径中不会有空格:
my @paths;
foreach my $line (@file_path) {
my @parts = split /\s+/, $line;
push @paths, $parts[-1];
}
......应该让你上路。