2013-01-09 9 views
7

Próbuję użyć polecenia tee do przekierowania danych wyjściowych do pliku, a chcę, aby plik został utworzony w katalogu, który nie został jeszcze utworzony .użyj polecenia tee do przekierowania danych wyjściowych do pliku w nieistniejącym katalogu

date | tee new_dir/new_file 

gdy NEW_DIR nie istnieje, polecenie tee nie mówiąc

tee: nowy_katalog/nowym_pliku: Nie ma takiego pliku lub katalogu

Gdybym stworzyć NEW_DIR przed uruchomieniem tee polecenia, to działa dobrze, ale z jakiegoś powodu nie chcę ręcznie tworzyć nowy_dir, czy można utworzyć nowy_dir za pomocą polecenia tee?

Odpowiedz

11

Nie. Musisz utworzyć katalog przed uruchomieniem tee.

+0

Katalog już istnieje w moim przypadku, ale tee skarży się, że plik nie istnieje, jeśli nie używam flagi -a z herbem. –

2

Wymień tee z funkcji, która tworzy katalog dla Ciebie:

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

Jeśli chcesz, aby funkcja działała przy wywołaniu z prostym Nazwa pliku:

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" 'Nie sądzę, że to całkiem słuszne ... – twalberg

+0

Jeśli pożądana jest solidność, można oczywiście dodać czek. . –

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

ponieważ to jest polecenie tee, jednocześnie zapisuje oba do new_file i do stdout

0

Hmm ... Po kilku eksperymentach odkryłem kilka interesujących rzeczy.

Przede wszystkim spróbujmy dotknąć jakiś plik:

touch ~/.lein/profiles.clj 

To działa dobrze. Ale użyjmy samo z cytatami:

touch "~/.lein/profiles.clj" # => touch: cannot touch ‘~/.lein/profiles.clj’: No such file or directory 

Tak, dla mojej funkcji bash:

append_to_file() { 
    echo $2 | tee -a $1 
} 

Potem zmienił zadzwonić z niego:

append_to_file '~/.lein/projects.clj' '{:user {:plugins [[lein-exec "0.3.1"]]}}' 

do niego (pierwszy argument bez ofert):

append_to_file ~/.lein/projects.clj '{:users {:plugins [[lein-exec "0.3.1"]]}}' 

And wszystko dobrze.

UPDATE

Ten przypadek uważa .lein jako istniejącego katalogu.

+3

'touch" ~/.lein/profiles.clj "' nie działa, ponieważ podwójne cudzysłowy uniemożliwiają rozszerzenie tyldy. – twalberg

Powiązane problemy