For each edge-of-range `touch`, if at first it fails, try it rounded to the nearest *more extreme* value in seconds, which some implementations will accept and clip it at or near the most extreme value in the range that it was going for. See #1491.
Unified · Split
| @@ -1,7 +1,9 @@ | ||
| 1 | 1 | #!/usr/bin/env bash |
| 2 | 2 | set -eu -o pipefail |
| 3 | 3 | |
| 4 | −# The largest-possible date for Ext4, nanos are special there, but ont usually on other filesystems | |
| 5 | −touch -d "2446-05-10 22:38:55.111111111" future | |
| 6 | −# The smallest-possible date for Ext4, nanos are special there, but ont usually on other filesystems | |
| 7 | −touch -d "1901-12-13 20:45:52.222222222" past | |
| 4 | +# Attempt to create files with the latest and earliest possible dates for ext4. Nanoseconds are | |
| 5 | +# special there, but not usually on other filesystems. In some touch implementations, the format | |
| 6 | +# may be rejected. So if a command fails, we try again with a more extreme date that is out of | |
| 7 | +# range, because some implementations will clip it to the edge of the range (but they may fail). | |
| 8 | +touch -d '2446-05-10 22:38:55.111111111' future || touch -d '2446-05-11 22:38:56' future | |
| 9 | +touch -d '1901-12-13 20:45:52.222222222' past || touch -d '1901-12-13 20:45:52' past | |