我想重命名多个文件夹,命名如下:
bcf_01_bcr_01
bcf_01_bcr_02
bcf_01_bcr_03
bcf_01_bcr_04
bcf_01_bcr_05
bcf_01_bcr_06
bcf_01_bcr_07
bcf_01_bcr_08
bcf_02_bcr_01
bcf_02_bcr_02
bcf_02_bcr_03
bcf_02_bcr_04
等等。我总共有 96 个文件夹,最后一个是:
bcf_12_bcr_08
另外,我有一个包含 96 个 ID 的列表,每行一个 ID。第一个文件夹(即bcf_01_bcr_01
)必须用列表的第一个 ID 重命名(我有 txt 格式的列表),最后一个文件夹 ( bcf_12_bcr_08
) 必须用列表的最后一个 ID 重命名。
我是 bash 的新手,因此感谢任何帮助/想法。
由于“旧名称”似乎是按词法排序的,并且假设“新名称”在文本文件中的每一行排列一个(即不能包含换行符),那么您应该能够使用简单的
for
循环/shell glob,例如对于 each ,这会从文件via
oldname
中读取一行并将其分配给以便与后续命令一起使用。这只是导致循环在失败的情况下正常退出(例如,因为其中的行数少于匹配的目录)。list_of_newnames
stdin
newname
mv
|| break
read
list_of_newnames
bcf*/
IFS=
赋值和-r
选项在这里可能不是必需的,但允许snewname
带有反斜杠字符和可能的前导空格。echo
一旦您对它正在做正确的事情感到满意,请删除它。