2011-08-19 31 views
7

Tôi muốn làm cho ngày hiện tại vào tiêu đề của một thư mục trong /home/chris/Downloads bằng cách sử dụng mkdirdate -IĐặt tiêu đề của một thư mục ngày trong bash?

tôi đã cố gắng mkdir "ngày -I" mà được cho tôi một thư mục tên là "ngày -I" Nếu không có có dấu ngoặc kép nó mang lại cho các lỗi

mkdir: invalid option -- 'I' 

Đang cố gắng để làm cho nó một biến tiếp theo

date= date -I 
mkdir -p $date 

với tùy chọn -p, có vẻ tốt, nhưng khi kiểm tra, thư mục chưa được tạo. loại bỏ -p được tôi lỗi

mkdir: cannot create directory `/home/chris/Downloads/': File exists 

và thậm chí trỏ nó đến toàn bộ đường dẫn

date= date -I 
mkdir "/home/chris/Downloads/$date" 

được cho tôi những lỗi tương tự như trước

Nó không phải là biến rỗng, Tôi xin nhắc lại 'd nó và giá trị là những gì tôi nên mong đợi, có vẻ như là giá trị không được thay thế trước khi thư mục được tạo ra. Điều gì sẽ là cách để giải quyết vấn đề này? Tôi đang chạy Ubuntu 11.04 (Natty Narwhal) nếu nó cung cấp cho bạn thêm thông tin.

+0

Giải pháp không yêu cầu thiết lập biến '$ date', nhưng cú pháp của bạn để làm như vậy bị tắt, và không chỉ vì các dấu gạch chéo còn thiếu hoặc $ (...). Trong phép gán biến, bạn không thể có dấu cách trước hoặc sau '='. 'date = date -I' đặt' $ date' thành chuỗi rỗng, và sau đó chạy 'date -I'. Nó giống như 'date = foobar date -I' ngoại trừ' $ date' được đặt thành chuỗi rỗng thay vì 'foobar'. Cú pháp chính xác sẽ là 'date = $ (date -I)'. –

Trả lời

12

cú pháp của bạn là sai:

mkdir -p /home/chris/downloads/$(date -I) 

hoặc

mkdir -p /home/chris/downloads/`date -I` 

sẽ làm việc

+3

+1. Mặc dù là một thói quen, tôi khuyên bạn nên đặt dấu ngoặc kép xung quanh các biến mở rộng của trình bao: 'mkdir -p/tmp /" $ (date -I) "'. Obivously không quan trọng cho 'ngày', nhưng đối với các lệnh khác nó có thể. 'mkdir -p/tmp/$ (echo foo bar)' không làm những gì bạn có thể mong đợi. – Nemo

+1

Cũng thích '$()' trên backticks như tất cả các vỏ POSIX hỗ trợ nó, nó có thể được lồng nhau không giống như backticks, và chỉ dễ đọc hơn. – jw013

3

Sử dụng tính năng này: backticks chạy lệnh thay vì in ra.

mkdir `date -I` 
0

Cũng có thể thử xargs (tuy nhiên, không chắc chắn nếu đó là một thực hành tốt)

date -I | xargs mkdir 
Các vấn đề liên quan