我想重命名多个文件夹,命名如下:
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重命名。
我是新来的巴什,所以任何帮助/想法都很感激。
发布于 2020-09-15 23:00:39
由于“旧名称”似乎是按词汇顺序排列的,并且假设“newname”在文本文件中每一行排列一次(即不能包含换行符),那么您应该能够使用一个简单的for循环/ shell glob,如
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正在做正确的事情,就删除它。
https://askubuntu.com/questions/1275422
复制相似问题