Renomeando arquivos usando a lista

5

Eu tenho arquivos disponíveis em um diretório como:

filename15_1
filename15_2
filename15_3
filename15_4

E assim por diante.

Eu tenho outro arquivo que contém informações de mapeamento de como eu quero renomear os arquivos. Este é um arquivo CSV.

filename15_1,filename30_6
filename15_2,filename30_7
filename15_3,filename60_3
filename15_4,filename60_4
filename15_5,filename60_5
filename15_6,filename60_6

Eu quero renomear os quatro arquivos lendo o mapeamento acima. Os arquivos de mapeamento estão tendo mais informações do que os arquivos reais presentes no diretório.

Meus arquivos devem ser renomeados para o seguinte.

filename30_6
filename30_7
filename60_3
filename60_4

Como posso fazer isso?

Observação: sou uma pessoa com experiência em banco de dados e tenho pouco conhecimento em Unix.

    
por user134306 15.09.2015 / 18:01

4 respostas

7

Se o seu arquivo de mapeamento for separado por vírgulas, você pode fazer isso:

while IFS=, read orig target; do
    mv "$orig" "$target"
done < mapping.txt
    
por 15.09.2015 / 18:13
4

Bem, uma resposta bastante idiota, mas:

sed -e 's/^/mv /' -e 's/,/ /' $mapping_file | sh 
    
por 15.09.2015 / 18:13
2

uma abordagem concisa e legível seria a awk ' system function

awk -F',' 'system("mv " $1 " " $2)' mappingFile.csv

que executará um comando para cada linha do arquivo de entrada

um resumo do comando

  • awk unix util que é ótimo para processar dados tabulares
  • -F',' o " F ield separador" é uma vírgula
  • system("mv " $1 " " $2) é executado para cada linha do arquivo de entrada
    • system(x) run x em uma subshell
    • $1 e $2 referem-se à primeira e segunda colunas, respectivamente
    • "mv " $1 " " $2 concatenação implícita cria o comando
  • mappingFile.csv usa este arquivo de entrada
por 15.09.2015 / 20:42
0

Com a ajuda das respostas acima, modifiquei o código da seguinte maneira e está funcionando.

cd $SRCE
for file in *
do

while IFS="," read srce target
do
if [[ $file = $srce ]] ; then 
mv "$srce" "$target"
fi
done < map_lst
done
    
por 15.09.2015 / 19:47

Tags