O que posso saber sobre essa parte do código? [duplicado]

1

O que essa parte de um script faz? Esta é uma parte de um scrpt no bash

for j in *.* ; do 
    cp $j ../../$name-S$i.gid/data/${j%%.*}$i.${j#*.}
    sed "s/$name-S/$name-S$i/" $j > ../../$name-S$i.gid/data/${j%%.*}$i.${j#*.}
done

Esqueci-me de dizer que "i" é um parâmetro que vai de 1 a um número específico e "$ name" faz parte do nome de uma pasta.

    
por carlo 20.05.2014 / 18:34

1 resposta

1

Este é um código estúpido. Primeiro eu reescrevo para que isso se torne óbvio (acrescento citações também):

for j in *.* ; do 
    target_file="../../$name-S$i.gid/data/${j%%.*}$i.${j#*.}"
    cp "$j" "$target_file"
    sed "s/$name-S/$name-S$i/" "$j" >"$target_file"
done

Ou seja. um arquivo é copiado e, imediatamente após, o novo arquivo é sobrescrito. Isso é feito para todos os arquivos cujo nome contenha um ponto (mas provavelmente não no início; depende (em bash ) da configuração de dotglob ).

O caminho do arquivo de destino é construído como:

  1. Coloque em outro diretório.

  2. Apague a extensão do arquivo (todas as partes dele, ou seja, tudo a partir do primeiro ponto).

  3. Adicione o número i e depois a extensão antiga.

A chamada sed substitui apenas a primeira ocorrência (limitação intencional?) de $name-S (ou seja, sua expansão) em uma linha por $name-S$i (sua expansão novamente).

    
por 21.05.2014 / 00:33

Tags