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. 無効なループ構文はdo2行目にする必要があります。
  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

関連情報