我正在制作一款游戏来帮助学习命令,我的目录中都有相同数量的不同类型的文件。我需要能够更改每个目录中文件名的一部分,以便表明它确实是来自该目录的文件。
例如,
目录 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
请记住,这两个示例都是针对单个目录的,并且不是递归的......