Como posso mover arquivos com base no conteúdo CSV?
Resumo : percorra o próprio CSV e extraia os campos nome do arquivo e diretório usando cut
.
Eu posso ver porque você começou na direção que você fez; mas, em vez de dividir o nome do arquivo e o diretório em arquivos separados, você pode fazer um loop pelo próprio arquivo CSV. Com base nisso, e colocando algumas coisas como os números de campo e o caminho do arquivo CSV nas variáveis, caso elas sejam alteradas em algum momento, você poderia fazer algo nos seguintes moldes:
#!/bin/bash # move_csv.sh - move XML files based on fields in a CSV filename_field=3 destination_field=12 csvfile="/Users/amermels/Documents/MERGED/Sling\ Manifest\ 2-17-2017.csv" while read csv_line; do mv "'echo $csv_line | cut -d',' -f$filename_field'" "'echo $csv_line | cut -d',' -f$destination_field'" # eg mv "BuyingTheView_SunsetCondoToronto_192543_SLING.xml" "3_5_17" done < $csvfile
(um pouco rápido e sujo; provavelmente há mais maneiras idiomáticas de extrair os campos da linha para mv
em vez de usar dois subprocessos e invocações separadas de cut
, mas isso pelo menos funciona no meu teste rápido )
Exemplo 'output' (baseado em dados confeccionados semelhantes em formato ao que você tem):
mv "BuyingTheView_SunsetCondoToronto_192543_SLING.xml" "3_5_17" mv "BuyingTheView_SunriseCondoToronto_192544_SLING.xml" "3_5_18" mv "BuyingTheView_LakeviewCondoToronto_192545_SLING.xml" "3_5_18" mv "BuyingTheView_SunsetCondoVancouver_192546_SLING.xml" "3_5_19" mv "BuyingTheView_SunsetCondoOttawa_192547_SLING.xml" "3_5_20" mv "BuyingTheView_SunsetApartmentMontreal_192548_SLING.xml" "3_5_20"
(Isso não é realmente a saída; esses são os comandos mv
que seriam executados conforme o script examina o CSV.)
Cuidado : preste atenção em qual diretório este script está operando! Ele supõe que os arquivos XML existam no diretório de trabalho (onde o script está sendo executado) e os subdiretórios já existem. Se esse não for o caso, é relativamente trivial adicionar um cd
ao diretório de trabalho correto ou usar um diretório base para adicionar aos caminhos no comando mv