通过更改顺序重命名文件夹

黑木崎

我有几个名称如下的目录:

"Some NameAndMorEyy_mm_dd"

我想将它们重命名为:

"yy_mm_dd_Some NameAndMore"

其中,该Some NameAndMore部分可以包含重音符号,空间,可与空间或结束_或两者,以及那些需要被删除。

一些例子:

"Jhon Doe_18_08_02"
"Jhon Doe 18_08_03"
"Jhon Doe_ 18_08_04"
"Jhon Doe _18_07_02"
"Jhon Doé_18_10_02"
"Jhon Doñe_18_08_02"

应该重命名为:

"18_08_02_Jhon Doe"
"18_08_03_Jhon Doe"
"18_08_04_Jhon Doe"
"18_07_02_Jhon Doe"
"18_10_02_Jhon Doé"
"18_08_02_Jhon Doñe"

分别。

现在,以空格和空格结尾的_只是几个,因此您可以根据需要忽略它们。

j

这(除外mv)是一个纯Bash解决方案:

#! /bin/bash

shopt -s dotglob    # Globs match names beginning with '.'
shopt -s nullglob   # Globs expand to nothing when nothing matches

for namedate in *[0-9][0-9]_[0-9][0-9]_[0-9][0-9] ; do
    [[ -d $namedate ]] || continue  # Skip non-directories
    name=${namedate%??_??_??}       # Remove date from end to get name
    date=${namedate#"$name"}        # Remove name from start to get date
    name=${name%[ _]}               # Remove trailing space or _
    name=${name%[ _]}               # Remove possible 2nd trailing space or _
    datename=${date}_${name}

    if [[ -e $datename ]] ; then
        printf "Warning: '%s' already exists.  Skipping.\\n" "$datename" >&2
    else
        mv -- "$namedate" "$datename"
        printf "Moved '%s' to '%s'\\n" "$namedate" "$datename" >&2
    fi
done

代码是Shellcheck -clean。为了避免发生奇怪的事情,它会在执行之前检查目标目录是否不存在mv

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章