如何在 csv 文件上使用 for 循环来复制文件

How to use for-loop over csv file to copy files

我有一个 .csv 文件,其中第 8 列(名为文件路径)包含我想复制到我在 Linux 中的主文件夹的文件的文件位置。现在我想遍历此列并使用 cp 函数将文件复制到我家的文件夹中。我尝试执行以下操作:

#!/bin/bash
while read filepath
do
    for filepath in $filepath
        cp $filepath /home/files
    done
done < files.csv

但这似乎不起作用。当我用 echo 语句替换 for 循环中的“cp”时,它没有打印出文件位置,而是打印出文件的整行。

感谢您的帮助,

您可以将 CSV 文件逐行读入 BASH 数组并使用数组中的第 8 个元素:

#!/bin/bash

while read -ra cols
do
    cp "${cols[7]}" /home/files
done < files.csv

如果 csv 文件是逗号分隔的,则使用:

while IFS=, read -ra cols
do
    cp "${cols[7]}" /home/files
done < files.csv

如果是csv,那么每个字段都用逗号分隔(默认),你可以用cut到select你需要的。

cut -d, -f8 files.csv | xargs -i cp {} /home/files/