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

1218
random

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

0
на какой ОС? John T 15 лет назад 1
Я запускаю это на ОС Linux 15 лет назад 0

5 ответов на вопрос

1
Creepygeek

Если имена файлов всегда имеют такой формат даты, я думаю, что что-то подобное будет работать (в скрипте) - это, конечно, при условии, что они все находятся в одном каталоге, а в оболочке определено «$ my_var_till» :

#!/bin/bash  cd <name_of_target_directory>  for i in `ls` do yyyy=`echo $i | awk -F- '`' mm=`echo $i | awk -F- ''` dd=`echo $i | awk -F- ''`  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
apricot boy

Если у вас есть утилита rename(я думаю, есть несколько из них, у меня есть версия perl):

rename -n -e 's/(\d-\d)-([\d-]+)/$1'"$your_variable"'$2/' * 

Этот -nфлаг означает, что renameфайлы не меняются, он просто показывает, что изменится. Удалите его, чтобы переименовать файлы.

0
user7963

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

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

0
Kevin Fegan

This script will rename any file with a name like

this: 2009-08-2009-08-13 to: 2009-08-$_2009-08-13 

For example, if my_var_till="whatever", and filename="2009-08-2009-08-13", then the result will be:

mv "2009-08-2009-08-13" "2009-08-whatever_2009-08-13" 

Files with names that are not in that format will be skipped.

Try this:

#!/bin/bash my_var_till="whatever" for f in * # test if file is proper format echo "$"|grep -E '^[0-9]-[0-9]-[0-9]-[0-9]-[0-9]$'>/dev/null if [ $? -eq 0 ]; then n=$(echo $|sed -r 's/^(.)(.)$/'"\1$_\2/") mv "$" "$" fi done 
-1
John T

Linux:

обязательный 1-лайнер ...

for i in `ls`;do echo $i | awk -F- '';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- '' done 

Вы также можете использовать renameкоманду и указать регулярное выражение Perl.

предполагая, что ваша переменная - это переменная, которую вы установили в оболочке, о чем я думаю, вы спрашиваете.

Окна:

переименовать 2009-08 * 2009-08-% my_var_till% _ *

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