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

我正在尝试使用tee命令将输出redirect到一个文件,并且我想要在尚未创build的目录中创build该文件。

date | tee new_dir/new_file 

当new_dir不在那里时,tee命令失败

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

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

Solutions Collecting From Web of "使用tee命令将输出redirect到不存在的目录中的文件"

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

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

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

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

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

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

嗯…经过一番实验,我发现了一些有趣的事情。

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

 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"]]}}' 

一切都很好。

UPDATE

这种情况下将.lein视为现有目录。