Я ищу для поиска, а затем скопировать все файлы с именами файлов, совпадающими в текстовом файле из каталога (с подкаталогами) на сервере в другой каталог. Я нашел отличное решение (хотя и довольно медленное) для окон здесь.

в файле .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 ответ1

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;
      }
    }

Редактировать: я изменил эту программу в соответствии с требованием оп, чтобы рекурсировать в данном каталоге, чтобы найти все изображения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .