Use xargs
com cp
da seguinte forma.
xargs -a /path/to/file.csv cp -r -t /path/to/dest/
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
Use xargs
com cp
da seguinte forma.
xargs -a /path/to/file.csv cp -r -t /path/to/dest/
Assumindo:
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) while
lê os nomes das pastas linha por linha e, para cada linha, executa cp -r
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.