Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

File timestamps accuracy is limited to one second for EXT3, one microsecond for UFS, and one nanosecond for EXT4 (at least according to experience). Is there any way to determine this based only on filesystem info?

The hacky alternatives I can think of are either to limit all my unit tests to seconds (which I do now), or to touch a bunch of files and checking which digits are zero in stat -c %x.

share|improve this question

2 Answers 2

up vote 4 down vote accepted
+50

As far as I know, there is no place that this information is stored on. It is coded into the filesystem. However, you can manually make a list of filesystems and the corresponding precision. I would use a case statement to test the filesystem id against your list of filesystems. You can make the default 1 since there are very few examples where precision is less than 1 second.

Older versions of FAT and current versions of zip use 2-second timestamp precision from what I have read online. However, I suggest you fact-check that.

You can get the id of a file's filsystem with the following command.

stat -f --format="%t" $file
share|improve this answer
2  
%i is unique per each file system, e.g. if you have two ext4 partitions, each will have a different id. –  Mikel May 6 '11 at 22:05
    
I edited my answer. Nice catch. I would vote you up if I could. –  Stephen May 7 '11 at 3:45
    
Looks like this is the best available option - It would be interesting to know if there is an authoritative list like this online. I couldn't find one with a quick search. –  l0b0 May 9 '11 at 11:29

Normally you would be able to use statvfs or pathconf, but they don't seem to support any way to find out that piece of information.

Apparently such a feature is being discussed for a future POSIX standard

we will also file some aardvarks for a pathconf enhancement to return the granularity of timestamps on a per path basis.

Unfortunately, I can't see any clean way to do that today, not even in an OS-specific manner.


Any approach that tries to build a list of file systems and whether it supports sub-second resolution is dangerous. For example, ext4 seems to support nanosecond resolution if the inodes are 256 bytes, but not if they are 128 bytes.

Compiling a comprehensive and accurate list would be hard, may require root access, and it might change tomorrow. Which sounds harder than just running stat a few times to me.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.