我想重命名一些同一目录下的文件。使用的文件名模式为Prefix_ddmmyy.tex
,具有欧洲日期格式。为了便于阅读和订购,我想以规范的日期格式重新命名模式Prefix_yymmdd.tex
中的文件。
任何想法如何为完整目录自动执行此操作?我的sed和regexp知识不是很尖锐......
答案 0 :(得分:3)
for Prefix _ *。tex中的文件;做
file_new = echo "$file" | sed -e 's:\([0-9][0-9]\)\([0-9][0-9]\)\([0-9][0-9]\)\(\.tex\):\3\2\1\4:'
测试“$ 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
答案 1 :(得分:1)
您也可以在没有外部命令的情况下使用任何bourne-type 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'
答案 2 :(得分:0)
您可以尝试“mmv”。