Trong Linux, làm thế nào để tạo một tệp có tên là ngày và giờ hiện tại


11

Tôi muốn tạo một tập tin tên sẽ là một ngày và thời gian hiện tại. Tôi có thể tạo một tập tin với touchlệnh. Ngoài ra tôi có thể nhận được thời gian hiện tại với datelệnh. Vì vậy, tôi nghĩ rằng, tôi cần phải bằng cách nào đó chuyển lệnh thứ hai sang lệnh thứ nhất. Làm thế nào tôi có thể làm điều đó?

Câu trả lời:


18

Sử dụng giá trị trả về từ biểu thức shell làm đối số để touch:

touch $( date '+%Y-%m-%d_%H-%M-%S' )

Kết quả: Một tập tin có tên eg 2012-03-11_14-33-53.

Câu trả lời này giả định rằng bạn đang sử dụng bash(được mô tả trong phần mantrang Thay thế lệnh ), nhưng các shell khác sẽ hoạt động giống nhau hoặc chỉ khác một chút.


@MdGao Và được mô tả trong cùng một phần của trang người đàn ông. Tôi thích câu trả lời tôi đã đưa ra, đây là một vài lý do
Daniel Beck

Tôi đã xóa bình luận của mình vì Markdown đã phá vỡ các backticks. cảm ơn vì đường dẫn @DanielBeck
Gao

2
@gasan Chỉ cần bao quanh nó với "dấu ngoặc kép. Bạn có thể tưởng tượng được đầu ra của dateviệc thay thế một phần của dòng lệnh, và touch Sun Mar 11 14:48:31 CET 2012sẽ tạo ra file tên Sun, Marvv touch "Sun Mar 11 14:48:31 CET 2012"Mặt khác hoạt động tốt (trừ tôi không chắc chắn như thế nào tốt các dấu hai chấm sẽ làm việc).
Daniel Beck

2
@gasan Dấu ngoặc đơn sẽ không hoạt động vì chúng không cho phép thay thế lệnh hoặc bất kỳ giải thích nào khác. Xem trích dẫn trong hướng dẫn Bash.
slhck

2
@gasan Sự khác biệt là nội dung của các trích dẫn đơn không được đánh giá. Hãy thử nó với echo "$HOME"echo '$HOME'. Đó là lý do tại sao tôi đề nghị sử dụng ".
Daniel Beck

0

Bạn có thể sử dụng lệnh đơn giản hơn

touch $(date | tr ' ' '-')

Hơi kém thanh lịch và ít được cho là di động, nhưng, vâng, điều đó cũng sẽ hiệu quả.
Scott

OK, vì tôi biết bạn đang đọc bài này, tôi sẽ đi vào chi tiết hơn một chút: Câu trả lời của Daniel đưa ra kết quả ở định dạng đã biết và hoàn toàn được kiểm soát. (1) Đầu ra từ datethường hiển thị thời gian là hh: mm: ss. Câu trả lời của bạn dẫn đến tên tập tin có chứa dấu hai chấm. Điều này có thể gây ra lỗi trên các hệ thống tệp dựa trên Windows. (2) Sản lượng thô từ một lệnh gọi đơn giản datephụ thuộc vào miền địa phương; tức là tùy chỉnh theo ngôn ngữ địa phương. Hãy thử LANG=de_DE dateLANG=fr_FR datexem các ví dụ. Tiết (Cont'd)
Scott

(Tiếp theo), (2a) Do đó, trong trường hợp (không chắc?) Bạn đã từng thay đổi ngôn ngữ trên hệ thống của mình hoặc bạn đưa tập lệnh và tập hợp các tệp dữ liệu từ hệ thống của mình cho ai đó có hệ thống được định cấu hình cho ngôn ngữ khác nhau, sẽ có một sự không phù hợp. (Tôi không chắc chắn rằng đây sẽ là một vấn đề thực sự, nhưng nó sẽ là một vấn đề thẩm mỹ.) (2b) Tôi không biết bất kỳ địa phương nào làm điều này, nhưng về mặt lý thuyết có thể có một địa điểm nơi dateghi ngày tháng là mm / dd / yy (hoặc dd / mm / yy). Tiết (Cont'd)
Scott

(Tiếp theo) Nếu bạn từng gặp một hệ thống như vậy, bạn sẽ có tên tệp chứa dấu gạch chéo và điều đó sẽ gây ra lỗi. (3) Câu trả lời của Daniel đưa ra một kết quả trong đó thứ tự từ điển (nghĩa là theo thứ tự chữ cái), được tạo ra bởi lshoặc *, tương ứng với thứ tự thời gian. Với câu trả lời của bạn, tất cả các Fritệp sẽ nằm ở đầu của bất kỳ danh sách được sắp xếp theo từ vựng nào, AprAugsẽ xuất hiện trước tất cả các tháng khác.
Scott
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.