小编the*_*eid的帖子

Perl获取父文件夹名称

使用File :: Find获取父目录名称的解决方案是什么?我知道如何只获取文件名或只获取目录路径,但我不知道如何为最后一个包含目录执行此操作.

例如,如果目录是/dir_1/dir_2/dir_3/.../dir_n/*.txt我需要获取' dir_n'名称.

use strict;
use warnings;
use File::Find;

my $dir = "some_path";

find(\&file_handle, $dir); 
sub file_handle {
    /\.txt$/ or return;
    my $fd = $File::Find::dir;
    my $fn = $File::Find::name;
    # ...
}
Run Code Online (Sandbox Code Playgroud)

perl

10
推荐指数
2
解决办法
1万
查看次数

我如何使用$ File :: Find :: prune?

我需要在第一个目录中编辑cue文件,而不是在子目录中递归.

find(\&read_cue, $dir_source);
sub read_cue {
    /\.cue$/ or return;

    my $fd = $File::Find::dir;
    my $fn = $File::Find::name; 
    tie my @lines, 'Tie::File', $fn
      or die "could not tie file: $!";

    foreach (@lines) {
        s/some substitution//;
    }

    untie @lines;
}
Run Code Online (Sandbox Code Playgroud)

我尝试过变种

$File::Find::prune = 1;
return;  
Run Code Online (Sandbox Code Playgroud)

但没有成功.我应该在哪里放置和定义$File::Find::prune

谢谢

perl

4
推荐指数
2
解决办法
4075
查看次数

Perl Archive :: Tar

我想用File :: Find存档所有txt文件,删除源文件并删除空目录.

我在使用'$ tar-> rename();'重命名文件时遇到了困难.因为我想从他们的完整路径名中删除它们并仅使用父目录/*.txt,但无论我尝试代码,只重命名一个文件.
我不知道执行'unlink'功能的适当位置在哪里.

谢谢.

use strict;
use warnings;
use Archive::Tar;
use File::Find;
use File::Basename;  

my $dir = "E:/";

my @files = ();

find(\&archive, $dir);      
sub archive {
    /\.txt$/ or return;
    my $fd = $File::Find::dir;
    my $fn = $File::Find::name; 
    my $folder = basename($fd);
    my $file = $_;

    push @files, $fn;

    my $tar = Archive::Tar->new();  
    $tar->add_files(@files);
    $tar->rename( $fn, $folder."\\".$file );
    $tar->write($fd.'.tar');

    unlink $fn; 
    finddepth(sub{rmdir},'.');
}
Run Code Online (Sandbox Code Playgroud)

perl

3
推荐指数
1
解决办法
1386
查看次数

标签 统计

perl ×3