Если бы имена файлов всегда находятся в том формате даты, я думаю, что что-то вроде этого работало бы (в сценарии) - это, конечно, предполагает, что они - все в том же каталоге, и '$my_var_till' определяется в оболочке:
#!/bin/bash
cd <name_of_target_directory>
for i in `ls`
do
yyyy=`echo $i | awk -F- '{print $3}`'
mm=`echo $i | awk -F- '{print $4}'`
dd=`echo $i | awk -F- '{print $5}'`
mv $i "$yyyy-$mm-$my_var_till-$yyyy-$mm-$dd"
done
если '$my_var_till' не определяется в оболочке, Вы могли бы взять его в качестве параметра командной строки (конечно, Вы могли бы хотеть добавить некоторую проверку ошибок с аргументом):
#!/bin/bash
my_var_till=$1
<continue on with code from above>
mmv может помочь:
Если когда-нибудь необходимо переименовывать или перемещать несколько файлов в соответствии с Linux, то команда оболочки mmv сделает жизнь легкой. mmv утилита также пригодится для копирования нескольких файлов, добавляя содержание одного файла в другие файлы, а также для создания ссылок.
Linux:
обязательный 1 лайнер...
for i in `ls`;do echo $i | awk -F- '{print "mv "$1"-"$2"-"$3"-"$4"-"$5" "$1"-"$2"-""'"$my_var_till"'""-"$3"-"$4"-"$5}';done
расширенный
#!/bin/bash
my_var_till=somevalue # can replace with $1 to use command-line arg to script
for i in `ls`
do echo $i | awk -F- '{print "mv "$1"-"$2"-"$3"-"$4"-"$5" "$1"-"$2"-""'"$my_var_till"'""-"$3"-"$4"-"$5}'
done
Вы могли также использовать rename
управляйте и предоставьте Perl regex.
принятие Вашей переменной является переменной, которую Вы установили в оболочке, которая является тем, что я думаю, что Вы спрашиваете.
Windows:
rename 2009-08* 2009-08-%my_var_till%_*