Как переименовать 2009-08-2009-08-13 в 2009-08- $ my_var_till_2009-08-13 для нескольких файлов? Часть 2009-08-13 изменяется в зависимости от даты файла, поэтому мне нужен способ получить эту часть имени файла. Могу ли я использовать базовое имя как-нибудь?
Если имена файлов всегда имеют такой формат даты, я думаю, что что-то подобное будет работать (в скрипте) - это, конечно, при условии, что они все находятся в одном каталоге, а в оболочке определено «$ 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):
Если вам когда-нибудь придется переименовать или переместить несколько файлов в 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:
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.
предполагая, что ваша переменная - это переменная, которую вы установили в оболочке, о чем я думаю, вы спрашиваете.