Answers:
文件中的此bash代码称为 a.sh
#!/bin/bash
today=`date '+%Y_%m_%d__%H_%M_%S'`;
filename="/home/el/myfile/$today.ponies"
echo $filename;
运行时,打印:
eric@dev ~ $ chmod +x a.sh
eric@dev ~ $ ./a.sh
/home/el/myfile/2014_08_11__15_55_25.ponies
代码说明:
用/ bin / bash解释器解释脚本。新建一个今天的变量。执行date命令,并传入Y,m,d,H,M,S标志以配置输出。将结果放入date变量。
创建一个名为filename的新变量,将$ today变量与其余的静态文件名文本一起包围。然后将文件名回显到屏幕。
将其塞成单线以增加lulz:
echo "/home/el/myfile/`date '+%Y_%m_%d__%H_%M_%S'`.ponies"
您似乎混淆了几件事。
set today = 'date +%Y'
看起来像tcsh语法,但是即使在tcsh中,它也会将字符串分配date +%Y
给变量today
,但不会运行date
命令。由于您可能正在使用bash或其他POSIX shell,因此赋值的语法为today=some_value
(等号周围没有空格)。要运行命令并将其输出分配给变量,请使用命令替换:
today=$(date +%Y-%m-%d)
(我还完成了日期说明)。您可以使用反引号而不是美元括号,但是在视觉上容易将其与正引号引起混淆,并且当需要在反引号中使用引号时,规则非常复杂且依赖于实现,因此最好不要坚持使用$(…)
(使用更精简的语法具有相同的效果)。
您&
在几个命令的末尾使用了。这使得命令在后台执行,这里不需要。我怀疑您的意思是&&
,这意味着只有第一个命令成功执行下一个命令。
today=$(date +%Y-%m-%d)
mkdir -p The_Logs &&
find …
&&
在每个命令之后使用的替代方法是使用来启动脚本set -e
。这告诉外壳程序在任何命令返回非零状态后立即停止执行脚本(if
条件和其他情况下的命令除外)。
set -e
today=$(date +%Y-%m-%d)
mkdir -p The_Logs
find …
您的find
命令很好,但是可能不会执行您打算做的事情(尽管我不确定这是什么)。
您要使用创建目录,mkdir
然后立即使用遍历该目录find
。除非目录已经存在,否则它将不会有用。您是要为今天的日志创建目录,还是将最近的文件从The_Logs
目录移动到例如eg的目录The_Logs.2012-02-11
?
mkdir -p "The_Logs.$today"
find The_Logs -mtime -1 -exec mv {} "The_Logs.$today" \;
还是您要重命名今天的日志文件以添加后缀$today
?这需要为每个要移动的文件计算不同的文件名。
find The_Logs -mtime -1 -exec sh -c 'mv "$0" "$0.$today"' {} \;
请注意,我使用-mtime
,是根据文件的修改时间来移动文件,而不是-atime
,这是上次读取文件的时间(如果您的系统跟踪该文件的时间,如果不是,则该时间可能早于文件的修改时间)。mtime)。
您可以重命名带有时间戳的文件
mv TheFile.log TheFile.log.`date +"%d-%m-%Y"`
:
因为这将在rsync和scp中将其作为主机读取。stackoverflow.com/a/37143274/390066