可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I am trying to use the tee command to redirect output to a file, and I want the file to be created in a dir which is yet to be created.
date | tee new_dir/new_file
when new_dir is not there, the tee command fails saying
tee: new_dir/new_file: No such file or directory
If I create the new_dir prior to running the tee command, then it works fine, but for some reason I don't want to create the new_dir manually, is it possible to create the new_dir with the tee command ?
回答1:
No. You'll have to create the directory before running tee
.
回答2:
Replace tee
with a function that creates the directory for you:
tee() { mkdir -p ${1%/*} && command tee "$@"; }
If you want the function to work when invoked with a simple file name:
tee() { if test "$1" != "${1%/*}"; then mkdir -p ${1%/*}; fi && command tee "$1"; }
回答3:
mkdir ./new_dir && date | tee ./new_dir/new_file
Since it is tee
command, it simultaneously writes both to the new_file
and to stdout
回答4:
Hmm... After some experiments, I've found some interesting things.
First of all, let's try to touch some file:
touch ~/.lein/profiles.clj
It works fine. But let's use the same thing with quotes:
touch "~/.lein/profiles.clj" # => touch: cannot touch ‘~/.lein/profiles.clj’: No such file or directory
So, for my bash function:
append_to_file() { echo $2 | tee -a $1 }
after that I changed call from it:
append_to_file '~/.lein/projects.clj' '{:user {:plugins [[lein-exec "0.3.1"]]}}'
to it (first argument without quotes):
append_to_file ~/.lein/projects.clj '{:users {:plugins [[lein-exec "0.3.1"]]}}'
And all is well.
UPDATE
This case considers .lein
as existing directory.