首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据列表重命名多个文件夹

根据列表重命名多个文件夹
EN

Ask Ubuntu用户
提问于 2020-09-15 22:05:25
回答 1查看 849关注 0票数 1

我想重命名多个文件夹,命名如下:

代码语言:javascript
复制
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个文件夹,最后一个是:

代码语言:javascript
复制
bcf_12_bcr_08

另外,我有一个96个ID的列表,每行一个ID。第一个文件夹(即bcf_01_bcr_01)必须用列表的第一个ID重命名(我有txt格式的列表),最后一个文件夹(bcf_12_bcr_08)必须用列表的最后一个ID重命名。

我是新来的巴什,所以任何帮助/想法都很感激。

EN

回答 1

Ask Ubuntu用户

回答已采纳

发布于 2020-09-15 23:00:39

由于“旧名称”似乎是按词汇顺序排列的,并且假设“newname”在文本文件中每一行排列一次(即不能包含换行符),那么您应该能够使用一个简单的for循环/ shell glob,如

代码语言:javascript
复制
for oldname in bcf*/; do 
  IFS= read -r newname || break
  echo mv --no-clobber -- "$oldname" "$newname"
done < list_of_newnames

对于每个oldname,这将通过stdin从文件list_of_newnames读取一行,并将其分配给newname,以便与后续的mv命令一起使用。在|| break失败的情况下,read只会使循环优雅地退出(例如,list_of_newnames中的行数比匹配bcf*/的目录少)。

IFS=赋值和-r选项在这里可能并不重要,但允许newnames使用反斜杠字符和可能的前导空格。

一旦您确信echo正在做正确的事情,就删除它。

票数 5
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1275422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档