Добавление метки времени к имени файла с mv в BASH
Ну, я новичок в linux, и у меня проблема с простым скриптом bash.
у меня есть программа, которая добавляет в файл журнала во время его выполнения. Со временем этот файл журнала становится огромным. Я хотел бы создать сценарий запуска, который будет переименовывать и перемещать файл журнала перед каждым запуском, эффективно создавая отдельные файлы журнала для каждого запуска программы. Вот что я получил до сих пор:
DATE=$(date +"%Y%m%d%H%M")
mv server.log logs/$DATE.log
echo program
при запуске, я вижу это:
: command not found
program
когда я cd в каталог журналов и запустить dir, я вижу это:
201111211437r.logr
что происходит? Я предполагаю, что есть некоторые синтаксические проблемы, которые я пропускаю, но я не могу понять это.
UPDATE: благодаря комментарию Шеллера ниже, я обнаружил, что проблема связана с тем, что я редактирую файл .sh в Notepad++ в windows, а затем отправляю через ftp на сервер, где я запускаю файл через ssh. После запуска dos2unix на файл, это работает.
новый вопрос: Как я могу сохранить файл правильно в первую очередь, чтобы избежать необходимости выполнять это исправление каждый раз, когда я повторно отправить файл?
5 ответов:
несколько строк, которые вы опубликовали из своего сценария, выглядят нормально для меня. Возможно, это что-то более глубокое.
вам нужно найти, какая строка дает вам эту ошибку. Добавить
set -xv
в верхней части вашего скрипта. Это выведет номер строки и команду, которая выполняется в STDERR. Это поможет вам определить, где в вашем скрипте вы получаете эту ошибку.кстати, у вас есть shebang в верхней части вашего скрипта? Когда я вижу что-то вроде этого, я обычно ожидаю, что это проблема с Shebang. Например, если у вас
#! /bin/bash
сверху, но ваш интерпретатор bash находится в/usr/bin/bash
, вы увидите эту ошибку.EDIT
новый вопрос: Как я могу сохранить файл правильно в первую очередь, чтобы избежать необходимости выполнять это исправление каждый раз, когда я повторно отправить файл?
два варианта:
- выберите редактировать - > преобразование EOL - >Unix Формат пункт меню при редактировании файла. После того, как он имеет правильные окончания строк, Notepad++ будет держать их.
- чтобы убедиться, что все новые файлы имеют правильные окончания строк, перейдите к Настройки->Предпочтения пункт меню, и потяните вверх предпочтения окне. Выберите Новый Документ / Каталог По Умолчанию tab. Под Новый Документ и радио. Нажмите кнопку закрыть.
Ну, это не прямой ответ на ваш вопрос, но в GNU/Linux есть инструмент, чья работа заключается в том, чтобы регулярно вращать файлы журналов, сохраняя старые на молнии до определенного предела. Это
logrotate
метод одной строки в bash работает следующим образом.
[some out put] > $(дата "+%Y.%m.%d-%H.%M.%S").Вер
создаст файл с именем метки времени с расширением ver. Рабочий файл со списком привязать снимок к имени файла штампа даты следующим образом может показать его работу.
find . -type f -exec ls -la {} \; | cut -d ' ' -f 6- >$(date "+%Y.%m.%d-%H.%M.%S").ver
конечно
cat somefile.log > $(date "+%Y.%m.%d-%H.%M.%S").ver
или даже проще
ls > $(date "+%Y.%m.%d-%H.%M.%S").ver