我在一个位置有 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
有一个awk命令当然可以完成这项工作后 将数据导出为 .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
笔记:
- 您需要
singleFolder
先切换到目录(查看命令中的命令提示符) - 如果目录名称中有空格,则此方法将失败(意外重命名)。
- 删除
echo
后即可实际重命名:)