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

时间:2015-05-04 14:43:09

标签: linux bash file for-loop copy

我有一个.csv文件,其中第8列(名为filepath)包含我要复制到Linux中我的主文件夹的文件的文件位置。现在我想循环遍历此列并使用cp函数将文件复制到我家中的文件夹。我试着做以下事情:

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

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

感谢您的帮助,

2 个答案:

答案 0 :(得分:3)

如果是csv,则每个字段用逗号分隔(默认情况下),您可以使用cut选择所需的字段。

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

答案 1 :(得分:1)

您可以逐行读取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