stat: dấu thời gian sửa đổi của một tập tin


11

Tôi sử dụng stat -f %m .bashrcđể có được thời gian sửa đổi .bashrc của tôi trên osx. Nhưng khi tôi chạy cùng một lệnh trên Ubuntu, nó sẽ báo lỗi:

stat: cannot read file system information for %m': No such file or directory

Có cách nào tương thích để đạt được điều này?

Câu trả lời:


12

Ubuntu sử dụng lõi GNU stat, trong khi OSX sử dụng biến thể BSD. Vì vậy, trên Ubuntu lệnh hơi khác một chút:

stat -c %Y .bashrc

Từ man stat:

   -c  --format=FORMAT
          use the specified FORMAT instead of the default; output  a  new
          line after each use of FORMAT

và:

   %Y     time of last data modification, seconds since Epoch

Nếu bạn muốn một cách di động để chạy những thứ này bất kể HĐH, thì có một số cách để làm điều đó. Tôi nghĩ rằng tôi sẽ đặt một biến một lần cho các tham số thích hợp:

if uname | grep -q "Darwin"; then
    mod_time_fmt="-f %m"
else
    mod_time_fmt="-c %Y"
fi

Và sau đó sử dụng giá trị này trong statlệnh bất cứ khi nào cần:

stat $mod_time_fmt .bashrc

7

Nó phụ thuộc vào những gì bạn có nghĩa là "này". Nếu bạn đang tự hỏi liệu có một cách cầm tay để có được một tập tin là mtimevới stat(1), sau đó không có, không có. BSD stat(1)khác với Linux stat(1).

Nếu bạn hỏi liệu có cách di động nào để lấy tệp không mtime, thì có, bạn có thể làm điều đó với perl(1):

perl -e 'print +(stat $ARGV[0])[9], "\n"' file

5

do các phiên bản OSX và Ubuntu statcó một số khác biệt trong đó OSX statmặc định cho đầu ra ngắn gọn và Linux statmặc định để tiết lộ một số hoops sẽ cần phải được nhảy qua. Một khả năng đơn giản là sử dụng bí danh trên OSX sẽ khiến stat hoạt động giống nhau trên cả hai.

Nếu bạn không phiền khi đặt bí danh để buộc đầu ra dài dòng stattrên OSX alias stat="stat -x"thì bạn không cần perl.

stat .bashrc| grep Modify là tất cả những gì bạn cần trong Ubuntu. nếu bạn đặt bí danh như trên thì nó cũng hoạt động theo OSX

Ví dụ từ Ubuntu 14.04.5 Kết quả giống hệt nhau có thể được lấy từ Ubuntu 16.04

   stat .bashrc| grep Modify
Modify: 2014-03-30 23:14:47.658210121 -0500

Nếu tất cả những gì bạn muốn là dấu thời gian, bạn có thể tách Modify:và giữ phần còn lại với

stat .bashrc| grep Modify | cut -c 9-

Nguồn:

https://ss64.com/osx/stat.html

Đầu ra của stat trên OSX


Tôi nghĩ rằng bạn đang thiếu tùy chọn -x trên OSX.
fushupinnanren

@Derry bạn đúng, thật đáng buồn là tôi phải dựa vào nghiên cứu cho các bit OSX vì tôi không có OSX. Câu trả lời đúng.
Anh Cả Geek
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.