重命名同一目录中的文件-Shell脚本

时间:2017-02-23 09:46:53

标签: bash shell

我有一个名为VERSION的数组,我从mydir目录获取,它有参数(文件),如下所示:

VERSION[0]="TEST01_0.TEST01_1"
VERSION[1]="TEST03_1"
VERSION[2]="TEST02_1.TEST02_2"
VERSION[3]="TEST04_2"
VERSION[4]="TEST02_3" 

我试图将TEST01_0.TEST01_1重命名为TEST01_1,将TEST02_1.TEST02_2重命名为TEST02_2。但我收到的错误如下:

mv: cannot stat `TEST01_0.TEST01_1': No such file or directory
mv: cannot stat `TEST02_1.TEST02_2': No such file or directory
你能帮我解决一下吗?这是我的代码块:

#!/bin/sh
VERSION=(/mydir/TEST*)
for file in "${VERSION[@]}"
do
    if [[ `echo ${file} | grep -o '_' | wc -l` == 2 ]]; then
    mv "${file}" "${file%.*}";
    fi
done

由于

1 个答案:

答案 0 :(得分:1)

最好的方法是使用mydir内部bash内部运行,如下所示,而不是依赖cutgrep

#!/bin/bash

for file in T*
do 
    # Getting the string only containing '_' and if the count matches, 2
    # doing the file rename

    dashes="${file//[^\_]/}"
    if (( "${#dashes}" == 2 ))
    then 
        mv -v "$file" "${file%.*}"
    fi
done