mv /重命名具有公共部分但未知文件模式的文件

时间:2018-03-16 08:33:29

标签: linux rename mv

我想重命名不同文件的开头

输入:

myfilename abc yeswithspaces.abc
myfilename def yeswithspaces.abc
myfilename_abc_nospaces.abc
myfilename def blabla.def
myfilename_abc_mainfile.ok

想要输出

newfilename abc yeswithspaces.abc
newfilename def yeswithspaces.abc
newfilename_abc_nospaces.abc
myfilename def blabla.def
myfilename_abc_mainfile.ok

如果我只有一个文件.abc,那么这个代码可以正常运行,但如果还有更多文件则没有:

if [ -e "${DOSSIER}/${OLD_NAME}"*.abc ];
    then
        for i in "${DOSSIER}/$OLD_NAME"*.abc; do
        [ -f "$i" ] || continue
        mv "$i" "${i/$OLD_NAME/$NEW_NAME}"
    done
fi

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

例如,如果mynamefile的长度为10,则可以写

len = ${#OLD_NAME}
for filename in $(ls | grep .abc) 
do
    suffix = $(filename:$len)
    mv filename $newname$suffix
done

答案 1 :(得分:0)

我没有找到适合我的问题的地方 如果是我的卷轴问题。这没关系!

ABC_Files=$(ls "$DOSSIER/$OLD_NAME"*.abc 2> /dev/null | wc -l)
    if [ **"$ABC_Files" != "0"** ];
        then
            for i in "${DOSSIER}/$OLD_NAME"*.abc; do
                [ -f "$i" ] || continue
                mv "$i" "${i/$OLD_NAME/$NEW_NAME}"
            done
    fi

当然假设你知道

$ DOSSIER是路径

$ OLD_NAME是您的实际文件名

$ NEW_NAME是您的新文件名