13

tee コマンドを使用して出力をファイルにリダイレクトしようとしていますが、まだ作成されていないディレクトリにファイルを作成したいと考えています。

date | tee new_dir/new_file

new_dir が存在しない場合、tee コマンドは次のように言って失敗します

ティー: new_dir/new_file: そのようなファイルまたはディレクトリはありません

tee コマンドを実行する前に new_dir を作成すると問題なく動作しますが、何らかの理由で手動で new_dir を作成したくない場合は、tee コマンドで new_dir を作成できますか?

4

4 に答える 4

22

いいえ。実行する前にディレクトリを作成する必要がありますtee

于 2013-01-09T13:53:32.773 に答える
7

ディレクトリを作成する関数に置き換えteeます。

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

単純なファイル名で呼び出されたときに関数を機能させたい場合:

tee() { if test "$1" != "${1%/*}"; then mkdir -p ${1%/*}; fi &&
   command tee "$1"; }
于 2013-01-09T13:57:01.287 に答える
1
mkdir ./new_dir && date | tee ./new_dir/new_file

コマンドなので、とteeの両方に同時に書き込みます。new_filestdout

于 2013-01-09T14:02:08.890 に答える
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、既存のディレクトリと見なされます。

于 2013-09-05T18:33:14.873 に答える