【问题标题】:How to use for-loop over csv file to copy files如何在csv文件上使用for循环来复制文件
【发布时间】:2015-07-14 00:12:54
【问题描述】:

我有一个 .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' 时,它并没有打印出文件位置,而是打印出文件的整行。

感谢您的帮助,

【问题讨论】:

  • 您的输入数据是什么样的?你能edit给我们看几行吗?

标签: linux bash file for-loop copy


【解决方案1】:

如果是csv,那么每个字段用逗号隔开(默认),你可以使用cut来选择你需要的。

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

【讨论】:

  • 谢谢!这很好!没有想到cut函数
  • 如果您有支持-t/--target-directory 开关的cp 版本,您可以这样做:cut -d, -f8 files.csv | xargs cp -t /home/files - 这种方法的优点是cp 将被调用的最少数量次,而不是每个文件一次。
【解决方案2】:

您可以将 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

【讨论】:

  • 这也完成了工作,是我选择的正确答案的不错选择
猜你喜欢
  • 1970-01-01
  • 2019-09-25
  • 2017-03-25
  • 2018-03-14
  • 1970-01-01
  • 2020-06-02
  • 2023-03-25
  • 2021-07-13
  • 2019-08-04
相关资源
最近更新 更多