2013-01-09 28 views
7

Tôi đang cố gắng sử dụng lệnh tee để chuyển hướng đầu ra đến tệp và tôi muốn tệp được tạo trong thư mục chưa được tạo .sử dụng lệnh tee để chuyển hướng đầu ra tới một tệp trong một thư mục không tồn tại

date | tee new_dir/new_file 

khi new_dir là không có, lệnh tee không nói

tee: new_dir/new_file: Không có tập tin hoặc thư mục

như vậy Nếu tôi tạo new_dir trước khi chạy lệnh tee, sau đó nó hoạt động tốt, nhưng đối với một số lý do tôi không muốn tạo new_dir bằng tay, là nó có thể tạo new_dir với lệnh tee?

Trả lời

11

No. Bạn sẽ phải tạo thư mục trước khi chạy tee.

+0

Thư mục đã tồn tại trong trường hợp của tôi, nhưng tee phàn nàn rằng tệp không tồn tại, nếu tôi không sử dụng cờ -a với tee. –

2

Thay tee với một chức năng tạo thư mục cho bạn:

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

Nếu bạn muốn các chức năng để làm việc khi gọi với một tên tập tin đơn giản:

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

'tee foo.txt' =>' mkdir -p foo.txt && lệnh tee "foo.txt" 'Tôi không nghĩ rằng điều đó là đúng ... – twalberg

+0

Nếu độ bền là mong muốn, một kiểm tra chắc chắn có thể được thêm vào .. –

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

Vì nó là lệnh tee, đồng thời ghi cả hai vào số new_filestdout

0

Hmm ... Sau một số thử nghiệm, tôi đã tìm thấy một số điều thú vị.

Trước hết, chúng ta hãy cố gắng chạm vào một số tập tin:

touch ~/.lein/profiles.clj 

Nó hoạt động tốt. Nhưng chúng ta hãy sử dụng điều tương tự với dấu ngoặc kép:

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

Vì vậy, đối với chức năng bash của tôi:

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

sau đó tôi đã thay đổi gọi từ nó:

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

với nó (đối số đầu tiên không có dấu ngoặc kép):

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

Và tất cả đều tốt.

CẬP NHẬT

trường hợp này xem xét .lein như là thư mục hiện có.

+3

'touch" ~/.lein/profiles.clj "' không thành công vì dấu ngoặc kép ngăn cản sự khai triển dấu ngã. – twalberg

Các vấn đề liên quan