Como faço para subconjugar e copiar diretórios usando um csv?

2

Como posso usar o .csv para copiar e colar um conjunto específico de diretórios para um novo local?

.csv tem esta aparência:

 directory-name
  500
  505
  666
  900
  .
  .
  .
  1200
    
por csheth 15.12.2014 / 10:42

3 respostas

2

Use xargs com cp da seguinte forma.

xargs -a /path/to/file.csv cp -r -t /path/to/dest/
    
por αғsнιη 01.09.2017 / 23:41
3

Assumindo:

  • O arquivo CSV tem uma única coluna
  • Existe um nome de pasta por linha
  • A primeira linha é cabeçalho e deve ser ignorada

Em seguida, um loop como este deve funcionar:

tail -n +2 file.csv | while read dirname; do cp -r "$dirname" /path/to/target/; done

Notas:

  • tail -n +2 é pular a primeira linha do arquivo (saída 2ª e linhas posteriores)
  • O loop while lê os nomes das pastas linha por linha e, para cada linha, executa cp -r
por janos 15.12.2014 / 12:25
1

Você pode selecionar um subconjunto com corte de matriz bash usando o próximo trecho de código:

#!/bin/bash

a=('tail -n +2 folders.csv');
b=("${a[@]::}");

for i in "${b[@]}"
do
    cp -r master_directory/"$i"/ new_path/;
done

Esta linha b=("${a[@]::}"); permite passar 2 argumentos para o seu script e selecionar apenas as pastas entre esses argumentos, por exemplo, se você digitar:

$ bash script.sh 1 3

o script selecionaria apenas as pastas entre a linha 1 e a linha 3 (depois de ignorar a linha de cabeçalho). No seu caso, ele selecionaria as pastas 505, 666, 900.

    
por Evin1_ 15.12.2014 / 15:12