将时间戳记添加到BASH中的mv文件名

那么,我是一个Linux新手,我有一个简单的bash脚本的问题。

我有一个在运行时添加到日志文件的程序。 随着时间的推移日志文件变得巨大。 我想创build一个启动脚本,在每次运行之前重命名并移动日志文件,为每次运行程序有效地创build单独的日志文件。 这是迄今为止我所得到的:

引擎收录

DATE=$(date +"%Y%m%d%H%M") mv server.log logs/$DATE.log echo program 

运行时,我看到:

 : command not found program 

当我cd到日志目录并运行目录,我看到这个:

 201111211437\r.log\r 

这是怎么回事? 我假设有一些我缺less的语法问题,但我似乎无法弄清楚。


更新:感谢下面的shellter的评论,我发现这个问题是由于我正在编辑窗口中的Notepad ++中的.sh文件,然后通过ftp发送到服务器,在那里我通过ssh运行该文件。 在文件上运行dos2unix后,它可以正常工作。

新的问题:我怎样才能正确地保存文件,以避免每次我重新发送文件时执行此修复程序?

你从脚本发布的几行看起来对我来说还好。 这可能更深一点。

你需要find哪一行给你这个错误。 set -xv添加到脚本的顶部。 这将打印出正在执行的行号和命令到STDERR 。 这将帮助您识别脚本中的哪个位置出现此特定错误。

顺便说一下,你的脚本的顶部有一个shebang吗? 当我看到这样的事情时,我通常会期待与Shebang有关的问题。 例如,如果你有#! /bin/bash #! /bin/bash在上面,但是你的bash解释器位于/usr/bin/bash ,你会看到这个错误。

编辑

新的问题:我怎样才能正确地保存文件,以避免每次我重新发送文件时执行此修复程序?

两种方式:

  1. 编辑文件时,selectEdit-> EOL Conversion-> Unix Format菜单项。 一旦它有正确的行结束符,Notepad ++将保留它们。
  2. 要确保所有新文件都有正确的行尾,请转到设置 – >首选项菜单项,然后拉出首选项对话框。 select新build文档/默认目录选项卡。 在新build文档格式下 ,selectUnix单选button。 点击closuresbutton。
 mv server.log logs/$(date -d "today" +"%Y%m%d%H%M").log 

嗯,这不是直接回答你的问题,但是GNU / Linux中有一个工具,它的工作是定期轮换日志文件,保持原来的文件压缩到一定的限度。 这是logrotate

bash中的单行方法就像这样工作。

[有些输出]> $(date“+%Y.%m。%d-%H.%M.%S”)。ver

将创build一个带有扩展名的时间戳名称的文件。 工作文件列出快照到date标记文件名称如下可以显示它的工作。

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

你可以在记事本中编写你的脚本,但只要确保你使用这个 – > $ sed -i's / \ r $ //'yourscripthere

我在cygwin工作的时候一直使用它。 希望这可以帮助