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つのエラーがあります:
- 無効なループ構文は
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