copia arquivos do diretório / subdiretório listado no arquivo de texto (Mac)

0

Estou procurando pesquisar e copiar todos os arquivos com nomes de arquivos correspondentes em um arquivo de texto de um diretório (com subdiretórios) em um servidor para outro diretório. Eu encontrei uma ótima solução (embora bastante lenta) para windows aqui .

em um arquivo .bat, algo como:

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

Como posso fazer isso no Mac / Linux?

isso funciona para arquivos que estão todos no mesmo diretório, mas não consigo descobrir como pesquisar subdiretórios na pasta de origem:

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

baseado no exemplo de @neofug, este é um script perl para fazer isso. funciona bem, exceto que ele não pesquisa nas subpastas da pasta src:

#!/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");
  }
}
    
por jamierob 22.04.2016 / 17:29

1 resposta

1

Você pode perl fazer isso, entrar na lista de arquivos de texto como um argumento de linha de comando e mudar os caminhos para se adequarem à sua configuração. :

    #!/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;
      }
    }

Edit: Eu modifiquei este programa como solicitado pelo op para recurse dentro do diretório fornecido para encontrar todas as imagens.

    
por 23.04.2016 / 07:22