如何在多个文件中将文件名的一部分更改为其他内容

如何在多个文件中将文件名的一部分更改为其他内容

我正在制作一款游戏来帮助学习命令,我的目录中都有相同数量的不同类型的文件。我需要能够更改每个目录中文件名的一部分,以便表明它确实是来自该目录的文件。

例如,

目录 1 名称“Orange”文件 1 名称:“water_orange.jpeg”文件 2 名称:“1_water_orange.jpeg”等等 15 个文件

目录 2 名称“Indigo”文件 1 名称:“water_indigo.jpeg”文件 2 名称:“1_water_indigo.jpeg”等等 15 个文件

我有 7 个目录,每个目录有 15 个文件,我想看看是否可以更改每个目录中文件名的颜色部分,而不必对每个单独的文件使用“mv”命令。

我尝试使用单引号和双引号来执行“echo sed”命令,但没有成功

即 echo sed "s/orange/indigo/g" 和 echo sed 's/orange/indigo/g'

任何帮助都深表感谢

答案1

类似下面的方法应该可以工作:

for i in $(ls *.jpeg)
do 
mv -v $i $(ls $i | sed 's/orange/indigo/')
done

但是这个非常笨拙的语法可能极大地改进了,正如steeldriver在下面的评论中所建议的那样,使用以下优雅的语法:

for i in *.jpeg; do mv -v -- "$i" "${i/orange/indigo}"; done

请记住,这两个示例都是针对单个目录的,并且不是递归的......

相关内容