使用 .csv 批量重命名

使用 .csv 批量重命名

我在一个位置有 700 个目录,我需要使用 .csv 文件重命名它们,如下所示:

我想用 Column_B 的条目替换 Column_A 的名称。

Column_A           Column_B

 F001               IC500
 F003               IC501
 F006               IC502
 F008               IC503
 ...                ...

如何批量重命名目录?

答案1

第一的将数据导出为 .csv 文件格式如下所示:

F001,IC500
F003,IC501
F006,IC502
F008,IC503

然后运行以下脚本将这些目录重命名为新名称:

while IFS=, read -a dirName; do
    echo mv -v "/singleFolder/${dirName[0]}" "/singleFolder/${dirName[1]}";
done < /path/to/file.csv

mv -v /singleFolder/F001 /singleFolder/IC500
mv -v /singleFolder/F003 /singleFolder/IC501
mv -v /singleFolder/F006 /singleFolder/IC502
mv -v /singleFolder/F008 /singleFolder/IC503
  • read -a用于将读入的每一行拆分成数组,然后IFS我将其重新定义为逗号,

  • 每行读入dirName变量。

  • 我们${dirName[0]}得到了该行的第一部分(A 列)。
  • 我们${dirName[1]}得到了该行的最后一部分(B 列)。

  • mv用于重命名的命令。
    因此,使用mv -v "/singleFolder/${dirName[0]}" "/singleFolder/${dirName[1]}",我们将位于目录中的目录名称从列 A 重命名为列 B 中的新名称singleFolder

  • -v选项显示在运行命令期间正在执行的操作。


您还可以使用该命令而不将行内容制作成数组,如下所示:

while IFS=, read -r oldName newName;do
    echo mv -v "/singleFolder/${oldName}" "/singleFolder/${newName}";
done < /path/to/file.csv

注意:删除echo对真实目录执行重命名的命令。

答案2

有一个命令当然可以完成这项工作 将数据导出为 .csv 文件格式 提及在之前的回答中

因此,将其导出为.csv 文件格式后,使用此命令轻松重命名:

awk -F, '{ system("echo mv -v " "/singleFolder/"$1 " /singleFolder/"$2) }' /path/to/file.csv

的内容$1将是 .csv 文件中的第一列 A,并且$2将是基于 awk 的第二列 BF字段分隔符,是逗号,,由选项定义-F,

与另一个答案相同,请注意删除echo命令以对您的真实目录执行重命名。

答案3

您还可以使用以下方法将存储在 libreoffice 中的数据导出为 .csv 文件:标签或者空间分隔符和使用方式xargs如下mv

/path/to/singleFolder$ xargs -a /path/to/file.csv -n 2 echo mv -v

笔记:

  1. 您需要singleFolder先切换到目录(查看命令中的命令提示符)
  2. 如果目录名称中有空格,则此方法将失败(意外重命名)。
  3. 删除echo后即可实际重命名:)

相关内容