我有几个名称如下的目录:
"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"
分别。
现在,以空格和空格结尾的_
只是几个,因此您可以根据需要忽略它们。
这(除外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] 删除。
我来说两句