13

我正在尝试使用 tee 命令将输出重定向到文件,并且我希望在尚未创建的目录中创建文件。

date | tee new_dir/new_file

当 new_dir 不存在时, tee 命令失败说

tee: new_dir/new_file: 没有这样的文件或目录

如果我在运行 tee 命令之前创建 new_dir ,那么它可以正常工作,但是由于某种原因我不想手动创建 new_dir ,是否可以使用 tee 命令创建 new_dir ?

4

4 回答 4

22

不,您必须在运行之前创建目录tee

于 2013-01-09T13:53:32.773 回答
7

替换tee为为您创建目录的函数:

tee() { mkdir -p ${1%/*} && command tee "$@"; }

如果您希望函数在使用简单文件名调用时工作:

tee() { if test "$1" != "${1%/*}"; then mkdir -p ${1%/*}; fi &&
   command tee "$1"; }
于 2013-01-09T13:57:01.287 回答
1
mkdir ./new_dir && date | tee ./new_dir/new_file

由于它是tee命令,因此它同时向 thenew_file和 to写入stdout

于 2013-01-09T14:02:08.890 回答
0

嗯……经过一些实验,我发现了一些有趣的东西。

首先,让我们尝试触摸一些文件:

touch ~/.lein/profiles.clj

它工作正常。但是让我们在引号中使用相同的东西:

touch "~/.lein/profiles.clj" # => touch: cannot touch ‘~/.lein/profiles.clj’: No such file or directory

所以,对于我的 bash 函数:

append_to_file() {
  echo $2 | tee -a $1
}

之后我改变了它的电话:

append_to_file '~/.lein/projects.clj' '{:user {:plugins [[lein-exec "0.3.1"]]}}'

给它(第一个参数不带引号):

append_to_file ~/.lein/projects.clj '{:users {:plugins [[lein-exec "0.3.1"]]}}'

一切都很好。

更新

这种情况认为.lein是现有目录。

于 2013-09-05T18:33:14.873 回答