Como mover ou copiar lista de arquivos referenciados em um arquivo csv para uma nova pasta

1

Eu gostaria de escrever um script de shell (OSX) que copia os arquivos listados em um arquivo csv para um diretório específico. Eu preciso retirar aspas de cada linha no arquivo csv.

Minha tentativa

for i in $(cat myfile.csv)
  temp="${$i%\"}"
  temp="${temp#\"}"

do
  cp foldername/$temp foldername/subfoldername
done

Eu recebo este erro:

./mfcsv.sh: line 2: syntax error near unexpected token 'temp="${$i%\"}"'
./mfcsv.sh: line 2: '  temp="${$i%\"}"'
    
por codecowboy 01.05.2014 / 12:54

2 respostas

3

Você tem 2 erros:

  1. Sintaxe de loop incorreta, do deve estar na segunda linha
  2. sintaxe de substituição inválida, sem sinal de dólar antes de i necessário

Tente isto:

#!/bin/bash

for i in $(cat myfile.csv)
do
  temp="${i%\"}"
  temp="${temp#\"}"

  cp foldername/$temp foldername/subfoldername
done

mas, ele falhará se você tiver espaços em nomes de arquivos. O script abaixo funcionará também com espaços:

#!/bin/bash

while read i;
do
  temp="${i%\"}"
  temp="${temp#\"}"

  cp "foldername/$temp" "foldername/subfoldername"
done < myfile.csv
    
por 01.05.2014 / 13:09
2

Coloque o do após as expansões de parâmetros, não antes. E deixe de fora o sinal $ dentro da expansão e use aspas duplas em torno das expansões, exceto ao atribuir a uma variável. Por exemplo

while read file
do
  temp=${file%\"}
  temp=${temp#\"}
  cp "foldername/$temp" "foldername/subfoldername"
done < myfile.csv
    
por 01.05.2014 / 13:09