在unix shell中有自动时间的目录
我想创建脚本,其中新生成的目录自动将当前时间作为名称的一部分.
句法 mkdir mydir[min-hour-day-month-year] 因此最近的目录将命名为 mydir101718052012 一小时后创建的目录 mydir111718052012 等等. 对不起,简单的问题,我是unix的新手,我使用的是bash 编辑:为什么不遵循正确的?我该怎么做 ? newdir = mydir$( date +%Y-%m-%d-%H-%M-%S) cp new.txt newdir/new1.txt 解决方法
我在bash启动脚本中设置了以下功能:
# Date Time Stamp dts() { date +%Y-%m-%d-%H-%M-%S; } # Date mkdir dmkdir() { mkdir $(dts); } 我主要在命令行中使用它们,如果你想在脚本中运行它们,你必须要么获取启动脚本,要么在脚本中定义shell函数.如果你想要一个名字前面(例如mydir),你可以很容易地给它一个这样的参数: # Date mkdir dmkdir() { mkdir "$@$(dts)"; } 这将被称为这样: $dmkdir mydir $ls -d mydir* mydir2012-05-18-11-38-40 这意味着如果您的参数列表包含空格,它们将显示在目录名称中,这可能是也可能不是一件好事. 你可以在shell函数中分配一个shell变量,这可以在函数外部访问: dmkdir() { newdir="$@$(dts)"; mkdir $newdir; } 像这样使用: $dmkdir mydir $cd $newdir $pwd /tmp/mydir2012-05-18-12-54-32 这非常方便,但有一些事情需要注意:1)你正在污染你的命名空间 – 你可能会覆盖由另一个进程创建的名为$newdir的shell变量2)这很容易忘记dmkdir要写入哪个变量,特别是如果你有很多shell函数写出变量.一个好的命名约定将对这两个问题有很大帮助. 另一个选择是让shell函数回显目录名: dmkdir() { local newdir="$@$(dts)"; mkdir $newdir && echo $newdir; } 这可以如下调用: newdir="$(dmkdir mydir)" local表示$newdir在dmkdir之外不可用,这是一个Good Thing(TM). 使用&&表示只有在目录创建成功时才回显目录的名称. $()语法允许您加载回显到STDOUT的任何内容以加载到变量中,单引号确保如果目录名中有任何空格,它仍会被加载到单个变量中. 这解决了先前解决方案中固有的命名空间污染问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |