我正在尝试使用tee命令将输出重定向到文件,我希望在尚未创建的目录中创建该文件。
date | tee new_dir/new_file
当new_dir不存在时,tee命令无法说
tee:new_dir / new_file:没有这样的文件或目录
如果我在运行tee命令之前创建new_dir,那么它工作正常,但由于某种原因我不想手动创建new_dir,是否可以使用tee命令创建new_dir?
答案 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_file
和stdout
答案 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
视为现有目录。