使用 .csv 文件进行批量重命名。

我在一个位置有700个目录,我需要使用一个.csv文件来重命名它们,如下所示: 我想用Column_B的条目替换Column_A的名称。
Column_A           Column_B

 F001               IC500
 F003               IC501
 F006               IC502
 F008               IC503
 ...                ...
如何批量重命名目录?
3个回答

首先,像下面这样将您的数据导出为.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 用于将每行读取的内容根据我重新定义的分隔符, 分割为数组。

  • 每行内容被存入变量dirName中。

  • 使用${dirName[0]} 可以获取到每行内容的第一部分(A列)。
  • 使用${dirName[1]} 可以获取到每行内容的最后一部分(B列)。

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

  • -v 选项显示命令执行过程中的详细信息。


也可以像这样使用命令,而不将行的内容作为数组。
while IFS=, read -r oldName newName;do
    echo mv -v "/singleFolder/${oldName}" "/singleFolder/${newName}";
done < /path/to/file.csv
注意:在您的真实目录上执行重命名操作时,请删除echo命令。

请问你能否澄清一下 "name_dir" 的含义?它是代码的一部分吗?还是我需要指定一个目录名称?或者其他什么意思。 - csheth
@ChintanSheth 不,这只是一个变量名。你只需要将/path/to/file.csv更改为你保存文件的.csv文件位置。然后切换到包含所有700个文件夹的目录并运行代码。 - αғsнιη

当然,有一个命令可以完成这个任务,在将数据导出为.csv文件格式之后,如前面的回答中所提到的。所以,在将其导出为.csv文件格式后,使用这个命令可以轻松地进行重命名:
awk -F, '{ system("echo mv -v " "/singleFolder/"$1 " /singleFolder/"$2) }' /path/to/file.csv

$1的内容将是来自.csv文件的第一列ColumnA,$2将是基于awk的F字段分隔符的第二列ColumnB,该分隔符是逗号,,由-F,选项定义。

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


此外,您可以将存储在LibreOffice中的数据导出为以制表符空格分隔的.csv文件,并使用xargsmv进行操作:
/path/to/singleFolder$ xargs -a /path/to/file.csv -n 2 echo mv -v

注意事项:

  1. 首先需要切换到singleFolder目录(请参考命令提示符中的命令)
  2. 如果您的目录名称中包含空格,此方法将失败(无法预料的重命名)。
  3. 删除echo以进行实际重命名 :)