Linux mv команда с добавлением пробелов во времени

Это мой bash-скрипт для копирования файла csv в новый файл, к которому добавлена ​​временная метка, после чего он копируется на другой сервер.

#!/bin/bash
timestamp=`date +"%Y%m%d%H%M%S"`
ssh root@172.16.1.125 mv /var/log/asterisk/cdr-csv/Master.csv /var/log/asterisk/cdr-csv/Master.csv.$timestamp
scp root@172.16.1.125:/var/log/asterisk/cdr-csv/Master.csv.$timestamp /opt/logs/asterisk/Master.csv.$timestamp

Это, однако, добавляет два пробела в конец файла. Пример:

Orig File: test.csv
MV файл: test.csv.20160204083042(space)(space)

Тогда когда scp пытается найти файл, который он не может подать из-за пробелов в конце. Я сдался, поскольку я попробовал все варианты.

2 ответа

Решение

Благодарю. Все, что кажется, что это была неправильная кодировка, окончания строк не были установлены в unix. Я разрабатываю на машине с Windows и развернуть на сервере, который испортил окончание строки.

Проверяйте скрипт на каждом шагу. То, что вы описываете, не должно происходить:

$ date +"%Y%m%d%H%M%S" | xxd
0000000: 3230 3136 3032 3034 3138 3034 3438 0a    20160204180448

В выводе есть новая строка, но она исчезает при назначении переменной, поэтому $timestamp будет чисто.

Любые пробелы в переменных также будут удаляться в строке с ssh / scp, потому что ваши файлы не заключены в кавычки - даже если в конце был пробел, он будет отброшен при разборе команды.

Чтобы убедиться, что вы можете передать вывод или вывести переменные в xxd, как в этом примере. Вы на самом деле увидите пространства, если они случаются.

В качестве альтернативы опубликовать весь сценарий (я предполагаю, что это отредактированная версия)

Другие вопросы по тегам