从文本文件中列出的目录/子目录中复制文件(Mac)

从文本文件中列出的目录/子目录中复制文件(Mac)

我想搜索然后复制文本文件中所有文件名匹配的文件,这些文件从服务器上的目录(包含子目录)复制到另一个目录。我找到了一个适用于 Windows 的很棒的解决方案(虽然速度很慢)这里

在 .bat 文件中,类似如下内容:

for /f "delims=" %%i in (text-list.txt) do echo D|xcopy "\\SERVER\FOLDER\%%i?" "c:\temp" /i /z /y /s

我如何在 Mac/Linux 上实现这一点?

这适用于位于同一目录中的文件,但我不知道如何在源文件夹中搜索子目录:

rsync --files-from ~/filelist.txt . ~/destfolder

根据@neofug 的示例,这是一个执行此操作的 perl 脚本。它运行良好,只是它不会搜索 srcfolder 中的子文件夹:

#!/usr/bin/env perl
use strict;
my $textFile = shift @ARGV;
my $filenames = {};
open F1, "<", $textFile or die "Cannot open file $textFile! $!\n";
while ( <F1> ){
  chomp;
  $filenames->{$_}++;
}
close(F1);
my $imgDir = "/Users/username/srcfolder";
chdir($imgDir);
my @imgList = glob "*.txt";
foreach(@imgList){
  if($filenames->{$_}){
    system("/bin/cp $_ /Users/username/destfolder");
  }
}

答案1

您可以我们perl为了实现此目的,请输入文本文件列表作为命令行参数并更改路径以适合您的设置:

    #!/usr/bin/env perl
    use strict;
    use File::Find;
    my $textFile = shift @ARGV;
    my $filenames = {};
    open F1, "<", $textFile or die "Cannot open file $textFile! $!\n";
    while ( <F1> ){
      chomp;
      $filenames->{$_}++;
    }
    close(F1);
    my $imgDir = "/home/user/Pictures/";
    my $imgList = {};
    find(\&findPics, "/home/user/Pictures/");
    foreach(keys %$imgList){
      if($filenames->{$_}){
        system("/bin/cp $imgList->{$_} /path/to/newImages/");
      }
    }
    sub findPics{
      if($_ =~ /.+[jpg|jpeg|png|gif]/i){
        $imgList->{$_} = $File::Find::name;
      }
    }

编辑:我根据 op 的要求修改了这个程序,以便在给定的目录中递归查找所有图像。

相关内容