如何使用 csv 对目录进行子集化和复制?

如何使用 csv 对目录进行子集化和复制?

如何使用 .csv 将一组特定目录复制并粘贴到新位置?

.csv 如下所示:

 directory-name
  500
  505
  666
  900
  .
  .
  .
  1200

答案1

假设:

  • CSV 文件只有一列
  • 每行一个文件夹名称
  • 第一行是标题,应该忽略

然后像这样的循环应该可以工作:

tail -n +2 file.csv | while read dirname; do cp -r "$dirname" /path/to/target/; done

笔记:

  • tail -n +2是跳过文件的第一行(输出第二行及以后的行)
  • 循环while逐行读取文件夹名称,并对每一行执行cp -r

答案2

使用xargs方法cp如下。

xargs -a /path/to/file.csv cp -r -t /path/to/dest/

答案3

您可以使用选择一个子集Bash 数组切片,使用下一段代码:

#!/bin/bash

a=(`tail -n +2 folders.csv`);
b=("${a[@]:$1:$2}");

for i in "${b[@]}"
do
    cp -r master_directory/"$i"/ new_path/;
done

此行b=("${a[@]:$1:$2}");允许您向脚本传递 2 个参数并仅选择这些参数之间的文件夹,例如如果您键入:

$ bash script.sh 1 3

脚本将仅选择第 1 行和第 3 行之间的文件夹(忽略标题行)。 在您的例子中,它将选择 505、666、900 文件夹。

相关内容