我想重命名一些都在同一个目录中的文件。使用的文件名模式是Prefix_ddmmyy.tex
欧洲日期格式。为了可读性和排序,我想以Prefix_yymmdd.tex
规范日期格式的模式重命名文件。
任何人都知道如何为完整目录自动执行此操作?我的 sed 和正则表达式知识不是很敏锐...
对于 Prefix_*.tex 中的文件;do file_new= echo "$file" | sed -e 's:\([0-9][0-9]\)\([0-9][0-9]\)\([0-9][0-9]\)\(\.tex\):\3\2\1\4:'
test "$file" != "$file_new" && mv -f "$file" "$file_new" 完成
或者,如果您有很多文件和/或想要递归处理文件,请替换:
for file in Prefix_*.tex ; do
和:
find . -name Prefix_*.tex -print | while read file ; do
或(非递归,GNU):
find . -maxtdepth 1 -name Prefix_*.tex -print | while read file ; do
你也可以在没有外部命令的情况下使用任何 bourne 类型的 shell:
for f in *.tex; do
_s=.${f##*.} _f=${f%.*} _p=${f%_*}_
_dt=${_f#$_p} _d=${_dt%????} _m=${_dt%??}
_y=${_dt#$_m} _m=${_m#??}
mv -- "$f" "$_p$_y$_m$_d$_s"
done
使用zsh将是:
autoload -U zmv
zmv '(*_)(??)(??)(??)(.tex)' '$1$4$3$2$5'
你可以试试“ mmv ”。