如何将 csv 文件中引用的文件列表移动或复制到新文件夹

如何将 csv 文件中引用的文件列表移动或复制到新文件夹

我想编写一个 shell 脚本(OSX),它将 csv 文件中列出的文件复制到特定目录。我需要从 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

相关内容