Как переименовать файлы на основе даты в оболочке? - PullRequest
1 голос
/ 13 марта 2009

Я хотел бы переименовать некоторые файлы, которые находятся в одном каталоге. Используется шаблон имени файла Prefix_ddmmyy.tex с европейским форматом даты. Для удобства чтения и упорядочения я хотел бы переименовать файлы в шаблон Prefix_yymmdd.tex с каноническим форматом даты.

Кто-нибудь думает, как я могу сделать это автоматически для полного каталога? Мое знание sed и regexp не очень острое ...

Ответы [ 3 ]

3 голосов
/ 13 марта 2009

для файла в префиксе _ *. 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:' 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
1 голос
/ 13 марта 2009

Вы также можете сделать это с любой оболочкой борнового типа без внешних команд:

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'
0 голосов
/ 13 марта 2009

Вы можете попробовать " mmv ".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...