2013-01-09 9 views
7

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

new_dirがない場合、teeコマンドは

ティー言って失敗し

date | tee new_dir/new_file 

:私は前に実行するnew_dirを作成する場合は、そのようなファイルやディレクトリ

番号:new_dir/NEW_FILEをteeコマンドを実行すると、正常に動作しますが、何らかの理由でnew_dirを手動で作成したくない場合は、teeコマンドでnew_dirを作成できますか?

答えて

11

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

+0

私の場合、ディレクトリはすでに存在していますが、teeで-aフラグを使用しないと、ファイルが存在しないというエラーが表示されます。 –

2

あなたのためのディレクトリを作成する関数でteeを交換してください:あなたは、単純なファイル名を指定して呼び出されたときの機能が動作する場合

tee() { mkdir -p ${1%/*} && command tee "[email protected]"; } 

:それ以来

tee() { if test "$1" != "${1%/*}"; then mkdir -p ${1%/*}; fi && 
    command tee "$1"; } 
+0

'tee foo.txt' =>' mkdir -p foo.txt && command tee "foo.txt"私はそれが正しいとは思わない... – twalberg

+0

堅牢性が望まれるなら、確かにチェックを追加することができます。 。 –

1
mkdir ./new_dir && date | tee ./new_dir/new_file 

teeコマンドであれば、同時にnew_filestdout

に両方を書き込む
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"]]}}' 

そして、 すべては順調です。

UPDATE

この場合は、既存のディレクトリとして.leinと見なします。

+3

'touch"〜/ .lein/profiles.clj "は二重引用符がティルド展開を禁止するため失敗します。 – twalberg

関連する問題