如何在 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/
我有一个 .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/