我正在尝试使用 tee 命令将输出重定向到文件,并且我希望在尚未创建的目录中创建文件。
date | tee new_dir/new_file
当 new_dir 不存在时, tee 命令失败说
tee: new_dir/new_file: 没有这样的文件或目录
如果我在运行 tee 命令之前创建 new_dir ,那么它可以正常工作,但是由于某种原因我不想手动创建 new_dir ,是否可以使用 tee 命令创建 new_dir ?
不,您必须在运行之前创建目录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
命令,因此它同时向 thenew_file
和 to写入stdout
嗯……经过一些实验,我发现了一些有趣的东西。
首先,让我们尝试触摸一些文件:
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
是现有目录。