标签: file-find

如何将参数传递给处理每个文件的File :: Find子例程?

使用File :: Find,如何将参数传递给处理每个文件的函数?

我有一个遍历目录的Perl脚本,以便将一些3通道TIFF文件转换为JPEG文件(每个TIFF文件3个JPEG文件).这有效,但我想将一些参数传递给处理每个文件的函数(不使用全局变量).

以下是我尝试传递参数的脚本的相关部分:

use File::Find;

sub findFiles
{
    my $IsDryRun2 = ${$_[0]}{anInIsDryRun2};
}

find ( { wanted => \&findFiles, anInIsDryRun2 => $isDryRun }, $startDir);
Run Code Online (Sandbox Code Playgroud)

$isDryRun是一个标量.$startDir是一个字符串,一个目录的完整路径.

$IsDryRun2 未设置:

在连接(.)中使用未初始化的值$ IsDryRun2或在TIFFconvert.pl第197行(#1)使用字符串(未初始化)使用未定义的值,就像它已经定义一样.它被解释为""或0,但也许这是一个错误.要禁止此警告,请为变量分配定义的值.

(旧的呼叫不带参数为:find ( \&findFiles, $startDir);)


测试平台(但是生产主页将是Linux机器,Ubuntu 9.1,Perl 5.10,64位):ActiveState Perl 64位.Windows XP.从perl -v:v5.10.0构建,用于MSWin32-x64-多线程二进制构建1004 [287188]由ActiveState提供.

perl file-find

13
推荐指数
1
解决办法
5687
查看次数

perl脚本以递归方式列出目录中的所有文件名

我写过以下perl脚本,但问题是它总是在其他部分,并报告不是文件.我在输入的目录中有文件.我在这做错了什么?

我的要求是以递归方式访问目录中的每个文件,打开它并以字符串形式读取它.但逻辑的第一部分是失败的.

#!/usr/bin/perl -w
use strict;
use warnings;
use File::Find;

my (@dir) = @ARGV;
find(\&process_file,@dir);

sub process_file {
    #print $File::Find::name."\n";
    my $filename = $File::Find::name;
    if( -f $filename) {
        print " This is a file :$filename \n";
    } else {
        print " This is not file :$filename \n";
    }
}
Run Code Online (Sandbox Code Playgroud)

perl file file-find

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

使用Perl的File :: Find时,如何将参数传递给想要的函数?

可能重复:
如何将参数传递给处理每个文件的File :: Find子例程?

可以像这样使用Perl的File :: Find模块:

find( \&wanted, @directories);
Run Code Online (Sandbox Code Playgroud)

我们如何在wanted函数中添加参数?

例如,我想在/tmp从每个文件中提取一些信息时遍历文件,结果应存储到不同的目录中.输出目录应作为参数给出.

perl file-find

6
推荐指数
1
解决办法
2449
查看次数

File :: Find ::规则和文件分隔符

File::Find::Rule在Strawberry Perl Windows上使用.

当我运行以下代码时:

@files = File::Find::Rule->file()
                              ->in( $dir );
                              foreach my $file (@files){
                              say $file;
                              }
Run Code Online (Sandbox Code Playgroud)

我得到这种格式的文件列表:

C:\data\mydata\file/1.xls 
Run Code Online (Sandbox Code Playgroud)

而不是这种格式:

C:\data\mydata\file\1.xls
Run Code Online (Sandbox Code Playgroud)

可能是什么问题呢?

perl file-find

6
推荐指数
1
解决办法
266
查看次数

一旦找到特定文件,我怎样才能打破递归查找功能?

我正在使用该File::Find模块遍历目录树.找到特定文件后,我想停止搜索.我怎样才能做到这一点?

   find (\$processFile, $mydir);

   sub processFile() {
      if ($_ =~ /target/) {
         # How can I return from find here?
      }
   }
Run Code Online (Sandbox Code Playgroud)

recursion perl file-find

5
推荐指数
1
解决办法
4130
查看次数

如何使用File :: Find打印仅具有相对路径的文件?

我在下面的代码中使用File :: Find来查找/home/user/data路径中的文件.

use File::Find;

my $path = "/home/user/data";
chdir($path);
my @files;

find(\&d, "$path");

foreach my $file (@files) {
print "$file\n";
}

sub d {
-f and -r and push  @files, $File::Find::name;
}
Run Code Online (Sandbox Code Playgroud)

当我将dir路径更改为我需要搜索文件的路径时,但它仍然为我提供了完整路径的文件.即

/home/user/data/dir1/file1
/home/user/data/dir2/file2
and so on...
Run Code Online (Sandbox Code Playgroud)

但我希望输出像

dir1/file1
dir2/file2
and so on...
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议我找到文件的代码,只显示当前的工作目录?

perl file-find

5
推荐指数
1
解决办法
4543
查看次数

在Terminal/Linux上查找包含特定日期范围文件名的所有文件

我有一个监控摄像头,它根据我给定的条件拍摄图像.图像保存在我的Linux上.图像命名惯例如下 -

CAPTURE04.YYYYMMDDHHMMSS.jpg
Run Code Online (Sandbox Code Playgroud)

该目录包含以下文件 -

CAPTURE04.20171020080501.jpg
CAPTURE04.20171021101309.jpg
CAPTURE04.20171021101913.jpg
CAPTURE04.20171021102517.jpg
CAPTURE04.20171021103422.jpg
CAPTURE04.20171022103909.jpg
CAPTURE04.20171022104512.jpg
CAPTURE04.20171022105604.jpg
CAPTURE04.20171022110101.jpg
CAPTURE04.20171022112513.jpg ... and so on.
Run Code Online (Sandbox Code Playgroud)

但是,实际上,现在我正在尝试使用terminal命令找到一种在特定日期时间(文件名)范围之间获取所有文件的方法. 注意:需要遵循文件名(YYYYMMDDHHMMSS),而不是文件创建/修改时间.

比如我需要获取文件名在2017-10-20 08:30:00和2017-10-22 09:30:00之间的所有文件

我正在尝试搜索谷歌并得到以下命令 -

find -type f -newermt "2017-10-20 08:30:00" \! -newermt "2017-10-22 09:30:00" -name '*.jpg'
Run Code Online (Sandbox Code Playgroud)

它返回在给定日期范围内创建/修改的文件.但我需要根据给定的文件名范围查找文件.所以我认为这对我的情况不起作用.

也尝试使用以下命令 -

find . -maxdepth 1 -size +1c -type f \( -name 'CAPTURE04.20171020083000*.jpg' -o -name 'CAPTURE04.2017102209300*.jpg' \) | sort -n
Run Code Online (Sandbox Code Playgroud)

这不起作用.. :(

请帮我写下实际的命令.提前致谢.

linux bash terminal file-find

5
推荐指数
1
解决办法
1601
查看次数

Perl File :: Find ::规则从数组中排除目录

我在数组中有一组目录

chdir /tmp;
my @dir=("test" "abc" "def")
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种方法使用File :: Find :: Rule以递归方式查找/ tmp中的所有文件,但不包括@dir中的文件.

我可以从@dir获取所有文件

my $rule =  File::Find::Rule->new;
$rule->file;
my @files = $rule->in( @dir );
Run Code Online (Sandbox Code Playgroud)

但我无法否定条件,即排除@dir.我在努力

chdir /tmp;
@files = File::Find::Rule->new
    ->file()
    ->name(@dir)
    ->prune
    ->in( "." );
Run Code Online (Sandbox Code Playgroud)

但没有输出.

perl find file-find

4
推荐指数
1
解决办法
3318
查看次数

Perl File :: Find:首先列出目录中的所有文件,然后跳转到下一个目录?

我想(通过使用File :: Find)首先列出当前目录中的所有文件,然后跳转到子目录.可能吗?

perl file-find

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

使用Perl的文件时::找到一种快速简便的方法来限制搜索深度?

我希望能够将Perl限制File::Find到目录深度(在指定搜索下面)到指定目录以及它下面的1和2子目录.

我希望能够同时枚举文件,如果可能的话.

它必须与绝对路径一起工作.

directory perl depth file-find

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

标签 统计

file-find ×10

perl ×9

bash ×1

depth ×1

directory ×1

file ×1

find ×1

linux ×1

recursion ×1

terminal ×1