csv 파일에서 참조되는 파일 목록을 새 폴더로 이동하거나 복사하는 방법

csv 파일에서 참조되는 파일 목록을 새 폴더로 이동하거나 복사하는 방법

csv 파일에 나열된 파일을 특정 디렉터리에 복사하는 쉘 스크립트(OSX)를 작성하고 싶습니다. csv 파일의 각 행에서 따옴표를 제거해야 합니다.

내 시도

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

do
  cp foldername/$temp foldername/subfoldername
done

다음 오류가 발생합니다.

./mfcsv.sh: line 2: syntax error near unexpected token `temp="${$i%\"}"'
./mfcsv.sh: line 2: `  temp="${$i%\"}"'

답변1

2개의 오류가 있습니다:

  1. 잘못된 루프 구문은 do두 번째 줄에 있어야 합니다.
  2. 대체 구문이 잘못되었습니다. i앞에 달러 기호가 필요하지 않습니다.

이 시도:

#!/bin/bash

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

  cp foldername/$temp foldername/subfoldername
done

그러나 파일 이름에 공백이 있으면 실패합니다. 아래 스크립트는 공백에도 작동합니다.

#!/bin/bash

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

  cp "foldername/$temp" "foldername/subfoldername"
done < myfile.csv

답변2

매개변수 확장 이전이 아닌 이후에 배치됩니다 do. 그리고 확장에서는 $ 기호를 생략하고 변수에 할당할 때를 제외하고는 확장 주위에 큰따옴표를 사용합니다. 예를 들어

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

관련 정보