【问题标题】:mv/rename files with common part but unknown file patternmv/rename 具有公共部分但文件模式未知的文件
【发布时间】:2018-08-25 06:05:55
【问题描述】:

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

输入:

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

【问题讨论】:

  • 尝试重命名命令,例如:rename 'my' mine *.abc
  • rename 没有安装,因为是要部署的应用,所以无法添加。

标签: linux rename mv


【解决方案1】:

我没有找到解决问题的正确位置 如果是我的卷轴问题。没关系!

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 是你的新文件名

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 我不能,文件名没有定义的长度并且可以包含空格......这太容易了:D
    • filename 不需要有确定的长度,只有 myfilename 需要。如果我没有误解 myfilename 是文件名的共同部分。
    • 是的,抱歉,这就是我想说的。 myfilename 没有定义的长度
    • 好的,我认为您应该编辑您的问题,为每个文件编写不同的 myfilename,因为它很容易被误解。顺便说一句,如果名称中没有模式,我看不到任何可能的解决方案。你知道旧称吗?
    • 我会尝试编辑标题。文件没有模式,但我在 var $OLD_NAME 中有“myfilename”部分
    猜你喜欢
    • 1970-01-01
    • 2018-10-03
    • 1970-01-01
    • 2014-04-20
    • 2010-12-16
    • 1970-01-01
    • 2012-01-11
    • 1970-01-01
    • 2018-09-15
    相关资源
    最近更新 更多