如何重命名shell中数据库上的文件?

时间:2009-03-13 07:12:14

标签: shell scripting sed

我想重命名一些同一目录下的文件。使用的文件名模式为Prefix_ddmmyy.tex,具有欧洲日期格式。为了便于阅读和订购,我想以规范的日期格式重新命名模式Prefix_yymmdd.tex中的文件。

任何想法如何为完整目录自动执行此操作?我的sed和regexp知识不是很尖锐......

3 个答案:

答案 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”。