在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的任何内容以加载到变量中,单引号确保如果目录名中有任何空格,它仍会被加载到单个变量中.

这解决了先前解决方案中固有的命名空间污染问题.

相关文章
相关标签/搜索