将时间戳记添加到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
,你会看到这个错误。
编辑
新的问题:我怎样才能正确地保存文件,以避免每次我重新发送文件时执行此修复程序?
两种方式:
- 编辑文件时,selectEdit-> EOL Conversion-> Unix Format菜单项。 一旦它有正确的行结束符,Notepad ++将保留它们。
- 要确保所有新文件都有正确的行尾,请转到设置 – >首选项菜单项,然后拉出首选项对话框。 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工作的时候一直使用它。 希望这可以帮助