Làm thế nào để bạn đặt ngày và thời gian trong một tên tập tin?


23

Tôi đang cố gắng thực thi một lệnh và muốn đặt ngày và giờ trong tên tệp đầu ra.

Đây là một lệnh mẫu tôi muốn chạy.

md5sum /etc/mtab > 2016_4_25_10_30_AM.log

Định dạng thời gian ngày có thể là bất cứ điều gì hợp lý với dấu gạch dưới. Ngay cả UTC nếu AM và PM không thể được sử dụng.


Nếu không phải Bash, thì bạn đang sử dụng cái vỏ nào?
Ryan

Ồ đó là bash ... Ý tôi là bash script *
visc

Bạn không đường ống, bạn đang chuyển hướng. Và câu hỏi sẽ giống nhau nếu bạn không chuyển hướng. Đang cập nhật tiêu đề.
Mikel

Câu trả lời:


46

Nếu bạn muốn sử dụng datetime hiện tại làm tên tệp, bạn có thể sử dụng datethay thế lệnh .

 $ md5sum /etc/mtab > "$(date +"%Y_%m_%d_%I_%M_%p").log"

Điều này dẫn đến tệp 2016_04_25_10_30_AM.log(mặc dù, với datetime hiện tại) được tạo với hàm băm md5 /etc/mtabnhư nội dung của nó.

Xin lưu ý rằng tên tệp chứa dấu thời gian định dạng 12 giờ có thể sẽ không sắp xếp theo tên theo cách bạn muốn sắp xếp. Bạn có thể tránh vấn đề này bằng cách sử dụng dấu thời gian định dạng 24 giờ thay thế.

Nếu bạn không có yêu cầu sử dụng định dạng ngày cụ thể đó, bạn có thể cân nhắc sử dụng định dạng ngày giờ theo tiêu chuẩn ISO 8601. Một số ví dụ về cách tạo các biểu diễn datetime ISO 8601 hợp lệ bao gồm:

 $ date +"%FT%T"
 2016-04-25T10:30:00

 $ date +"%FT%H%M%S"
 2016-04-25T103000

 $ date +"%FT%H%M"
 2016-04-25T1030

 $ date +"%Y%m%dT%H%M"
 20160425T1030

Nếu bạn muốn tên tệp "an toàn hơn" (ví dụ: để tương thích với Windows), bạn có thể bỏ qua dấu hai chấm từ phần thời gian.

Xin lưu ý rằng tất cả các ví dụ trên đều giả định thời gian hệ thống cục bộ. Nếu bạn cần một biểu diễn thời gian phù hợp giữa các múi giờ, bạn nên chỉ định bù múi giờ hoặc UTC. Bạn có thể có được độ lệch múi giờ tuân thủ ISO 8601 bằng cách sử dụng "% z" trong phần định dạng của datecuộc gọi của bạn như sau:

 $ date +"%FT%H%M%z"
 2016-04-25T1030-0400

Bạn có thể nhận được thời gian UTC trong datecuộc gọi của mình bằng cách chỉ định -ucờ và thêm "Z" vào cuối chuỗi thời gian để chỉ ra rằng thời gian là UTC như thế này:

 $ date -u +"%FT%H%MZ"
 2016-04-25T1430Z

@Mikel Bạn và tôi có chỉnh sửa chéo không?
Ryan

Có thể. Tôi chỉ thay đổi "subshell" thành "thay thế lệnh". Tôi đã hoàn thành, vì vậy hãy chỉnh sửa theo ý muốn.
Mikel

@Mikel Không có vấn đề. Tôi đã gửi lại bản chỉnh sửa của mình bây giờ.
Ryan

@Mikel Đừng lo! Tôi nên nhớ gọi nó là "thay thế lệnh" bằng mọi cách. Cảm ơn đã cải thiện câu trả lời!
Ryan

3
Underscore là một nhân vật kỳ lạ. Nên sử dụng ISO-8601 như $(date +%FT%T)sẽ cung cấp 2016-04-25T10:30:00.
hschou
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.