* src/stat.c (print_stat): New %w and %W formats.
(do_stat): Include %w in default format.
(usage): Document new specifiers.
* doc/coreutils.texi (stat invocation): Likewise.
* NEWS: Likewise.
sort now supports -d, -f, -i, -R, and -V in any combination.
- stat now accepts the %m format directive to output
- the mount point for a file.
+ stat now accepts the %m format directive to output the mount point
+ for a file. It also accepts the %w and %W format directives for
+ outputting the birth time of a file, if one is available.
** Changes in behavior
@item %T - Minor device type in hex
@item %u - User ID of owner
@item %U - User name of owner
+@item %w - Time of file birth, or @samp{-} if unknown
+@item %W - Time of file birth as seconds since Epoch, or @samp{-}
@item %x - Time of last access
@item %X - Time of last access as seconds since Epoch
@item %y - Time of last modification
case 'o':
out_uint (pformat, prefix_len, statbuf->st_blksize);
break;
+ case 'w':
+ {
+ struct timespec t = get_stat_birthtime (statbuf);
+ if (t.tv_nsec < 0)
+ out_string (pformat, prefix_len, "-");
+ else
+ out_string (pformat, prefix_len, human_time (t));
+ }
+ break;
+ case 'W':
+ {
+ struct timespec t = get_stat_birthtime (statbuf);
+ if (t.tv_nsec < 0)
+ out_string (pformat, prefix_len, "-");
+ else if (TYPE_SIGNED (time_t))
+ out_int (pformat, prefix_len, t.tv_sec);
+ else
+ out_uint (pformat, prefix_len, t.tv_sec);
+ }
+ break;
case 'x':
out_string (pformat, prefix_len, human_time (get_stat_atime (statbuf)));
break;
{
if (terse)
{
- format = "%n %s %b %f %u %g %D %i %h %t %T %X %Y %Z %o\n";
+ format = "%n %s %b %f %u %g %D %i %h %t %T %X %Y %Z %W %o\n";
}
else
{
"Device: %Dh/%dd\tInode: %-10i Links: %-5h"
" Device type: %t,%T\n"
"Access: (%04a/%10.10A) Uid: (%5u/%8U) Gid: (%5g/%8G)\n"
- "Access: %x\n" "Modify: %y\n" "Change: %z\n";
+ "Access: %x\n" "Modify: %y\n" "Change: %z\n" " Birth: %w\n";
}
else
{
" Size: %-10s\tBlocks: %-10b IO Block: %-6o %F\n"
"Device: %Dh/%dd\tInode: %-10i Links: %h\n"
"Access: (%04a/%10.10A) Uid: (%5u/%8U) Gid: (%5g/%8G)\n"
- "Access: %x\n" "Modify: %y\n" "Change: %z\n";
+ "Access: %x\n" "Modify: %y\n" "Change: %z\n" " Birth: %w\n";
}
}
}
fputs (_("\
%u User ID of owner\n\
%U User name of owner\n\
+ %w Time of file birth, or - if unknown\n\
+ %W Time of file birth as seconds since Epoch, or - if unknown\n\
%x Time of last access\n\
%X Time of last access as seconds since Epoch\n\
%y Time of last modification\n\
misc/split-a \
misc/split-fail \
misc/split-l \
+ misc/stat-birthtime \
misc/stat-fmt \
misc/stat-hyphen \
misc/stat-mount \
--- /dev/null
+#!/bin/sh
+# ensure that stat attempts birthtime access
+
+# Copyright (C) 2010 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../src
+
+# Whether birthtime is supported or not, it better not change even when
+# [acm]time are modified. :)
+touch a || fail=1
+btime=$(stat --format %W a) || fail=1
+atime=$(stat --format %X a) || fail=1
+mtime=$(stat --format %Y a) || fail=1
+ctime=$(stat --format %Z a) || fail=1
+
+case $(stat --format %x a) in
+ *.000000000*) sleep 2;; # worst case file system is FAT
+ *) # FIXME: sleep .1 would be sufficient if %X is fixed to show nanoseconds
+ sleep 1;;
+esac
+
+touch a || fail=1
+test "x$btime" = x$(stat --format %W a) || fail=1
+test "x$atime" != x$(stat --format %X a) || fail=1
+test "x$mtime" != x$(stat --format %Y a) || fail=1
+test "x$ctime" != x$(stat --format %Z a) || fail=1
+
+Exit $fail