1

我想重命名一些都在同一个目录中的文件。使用的文件名模式是Prefix_ddmmyy.tex欧洲日期格式。为了可读性和排序,我想以Prefix_yymmdd.tex规范日期格式的模式重命名文件。

任何人都知道如何为完整目录自动执行此操作?我的 sed 和正则表达式知识不是很敏锐...

4

3 回答 3

3

对于 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
于 2009-03-13T07:19:10.093 回答
1

你也可以在没有外部命令的情况下使用任何 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'
于 2009-03-13T11:46:47.440 回答
0

你可以试试“ mmv ”。

于 2009-03-13T09:49:31.480 回答