2010-09-25 3 views
1

Мой сервер использует CentOS 5.5 (это почти Red Hat Linux).Использование переменной оболочки внутри команды

Я хочу создать резервную копию набора изображений в файлы с отметкой времени. Этот код будет работать:


z_cmd1=$(tar cvzf /home/user1/public_ftp/misc/pics_20100925_142230.tar.gz /home/user1/public_html/misc/_pics_var/F???????.jpg) 
echo "tar output =[${z_cmd1}]" 

, но я, конечно, хочу, штамп времени, чтобы быть автоматическим.

Следующий код не работает. Так или иначе, третья строка (та, у которой есть tar) терпит неудачу. «tar» что-то делает, но он не создает никаких файлов в ожидаемой папке назначения. Зачем?


z_fname=$(date +"/home/user1/public_ftp/misc/pics_%Y%m%d_%H%M%S.tar.gz") 
echo "File name =[${z_fname}]" 
z_cmd1=$(tar cvzf ${z_fname} /home/user1/public_html/misc/_pics_var/F???????.jpg) 
echo "tar output =[${z_cmd1}]" 

Спасибо.

+0

У вас установлен флаг 'v' erbose, что он говорит? 'set -xv' часто помогает при отладке сценариев оболочки. – msw

+0

Вы говорите, что «tar' что-то делает. Что оно делает? Какие сообщения об ошибках вы получаете? Что выводится при echo '$ {z_cmd1}'? Несмотря на то, что в этом случае это не представляется необходимым, рекомендуется указывать переменные, содержащие имена файлов. –

+0

Код «работает» для меня - имя выходного файла генерируется правдоподобно, а затем «tar» терпит неудачу, потому что у меня нет каталога '/ home' на моей машине, не говоря уже о каталогах под ним. Почему вы записываете выходные данные «tar»? Почему бы просто не позволить этому запустить? И вы, возможно, захотите также зафиксировать ошибки. –

ответ

1

Попробуйте это что-то вроде этого:

mydate=`date +"%m-%d-%Y"`; 
input="/home/user1/public_html/misc/_pics_var/F???????.jpg"; 
output="/home/user1/public_ftp/misc/pics_$mydate.tar.gz"; 
tar cvzf $output $input && echo "$output created succesfully!"; 
if [ ! $? == 0 ]; then echo "$output failed"; fi; 

Мы создаем дату в качестве переменной. Мы создаем переменные ввода и вывода, используя переменную date в выходной переменной. Затем выполните команду и проверьте, выполнена ли она без ошибок.

+0

Обратных шагов вокруг команды «tar» не должно быть. –

+0

Вы правы, я исправил это. – CodeReaper

Смежные вопросы