简单的Bash脚本:更改文件名以模仿目录

时间:2015-02-28 22:21:48

标签: bash substitution

我有312个目录,

Ion_0001- Ion_0312. 

在每个目录中,我都有一个文件light.out。我想将每个目录中的文件名更改为,例如:

Ion_0001.out

我相信我还需要替换/,以便我的输出DOESNT看起来像这样:

Ion_0001/.out

任何人都可以用一个简单的脚本来帮助我吗?

这是我尝试过的:

#!/bin/bash
for dir in  */
do
cd $dir

for filename in *.out; do
mv $filename ${filename//$dir.out}
done
cd ..
done

谢谢!

2 个答案:

答案 0 :(得分:2)

不是免费的编码服务,但它很简单,不值得争论......

假设这个文件结构:

Ion_0001/
Ion_0001/light.out
Ion_0002/
Ion_0002/light.out
...

在脚本中运行此代码或仅在命令行运行:

for i in Ion_0*
do
    mv "${i}/light.out" "${i}/${i}.out"
done

导致这种结构:

Ion_0001/
Ion_0001/Ion_0001.out
Ion_0002/
Ion_0002/Ion_0002.out
...

那是你在找什么?

答案 1 :(得分:2)

for dir in Ion*/; do 
    mv "${dir}light.out" "${dir}${dir%/}.out"
done

Ion*/模式中的尾部斜杠仅将结果限制为目录,但斜杠将出现在变量的值中。