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, как в этом примере. Вы на самом деле увидите пространства, если они случаются.
В качестве альтернативы опубликовать весь сценарий (я предполагаю, что это отредактированная версия)