使用tee命令将输出重定向到不存在的目录中的文件

时间:2013-01-09 13:46:04

标签: linux shell unix tee

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

date | tee new_dir/new_file

当new_dir不存在时,tee命令无法说

  

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

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

4 个答案:

答案 0 :(得分:14)

没有。在运行tee之前,您必须先创建目录。

答案 1 :(得分:4)

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

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

如果希望函数在使用简单文件名调用时有效:

tee() { if test "$1" != "${1%/*}"; then mkdir -p ${1%/*}; fi &&
   command tee "$1"; }

答案 2 :(得分:1)

mkdir ./new_dir && date | tee ./new_dir/new_file

由于它是tee命令,它同时写入new_filestdout

答案 3 :(得分: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视为现有目录。