Переименуйте файлы на основе части файла

Как я переименовываю 2009-08-2009-08-13 к 2009-08-$my_var_till_2009-08-13 для нескольких файлов? 13.08.2009 изменений части относительно даты файла, таким образом, мне нужен способ захватить ту часть имени файла. Я мог использовать базовое имя так или иначе?

0
задан 21.09.2009, 06:01

3 ответа

Если бы имена файлов всегда находятся в том формате даты, я думаю, что что-то вроде этого работало бы (в сценарии) - это, конечно, предполагает, что они - все в том же каталоге, и '$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>
1
ответ дан 24.11.2019, 12:45

mmv может помочь:

Если когда-нибудь необходимо переименовывать или перемещать несколько файлов в соответствии с Linux, то команда оболочки mmv сделает жизнь легкой. mmv утилита также пригодится для копирования нескольких файлов, добавляя содержание одного файла в другие файлы, а также для создания ссылок.

0
ответ дан 24.11.2019, 12:45

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%_*
-1
ответ дан 24.11.2019, 12:45

Теги

Похожие вопросы