如何在bash中验证file2比file1新?

lid*_*dia 63 bash

如何验证file2上次修改是在 之后file1

在本例中,perl修改时间比stack. 是否有 bash 或 Linux 命令可以根据修改时间比较这些文件?

-rw-r--r--    1 root     root         1577 Sep  7 22:55 stack
-rwxr-xr-x    1 root     root          626 Sep  7 23:10 perl
Run Code Online (Sandbox Code Playgroud)

sub*_*nki 64

在这里找到

for f in /abcd/xyz* do
   [ "$f" -nt /abcd/test.txt ] && echo "file f$ found" done
Run Code Online (Sandbox Code Playgroud)

  • 此外`-ot` 是“老于”。 (14认同)
  • 我想我刚刚遇到了这个问题。对于具有相同修改时间(低至几秒)的文件,它们在这些测试中是“相同”年龄;-nt 和 -ot 都给出相同的结果 (false)。在我的用例中,我有一个程序读取其他输出,我需要确保它们以正确的顺序运行。在这种情况下,似乎有必要比较纳秒。 (2认同)
  • @sjmc根据文件系统的实现,同时修改的两个文件可能会被“批处理”,从而分配相同的修改时间。还取决于修改时间如何确定。这是“可以”的情况,而不是“必须”的情况,所以它实际上只是“取决于”。 (2认同)

Edd*_*ker 44

if [[ FILE1 -nt FILE2 ]]; then
  echo FILE1 is newer than FILE2
fi
Run Code Online (Sandbox Code Playgroud)

取自“男人测试”。摘抄:

FILE1 -nt FILE2
  FILE1 is newer (modification date) than FILE2
Run Code Online (Sandbox Code Playgroud)


Den*_*son 8

另一种方法来做到这一点:

find -name file2 -newer file1
Run Code Online (Sandbox Code Playgroud)

如果 file2 较旧或与 file1 相同,则将返回 null。如果文件 2 较新,它将返回文件 2 的名称(和目录)。

请注意,Linux 不会跟踪文件的创建时间。这些测试将针对最近的修改日期和时间。

  • Linux 确实会跟踪创建时间:它被称为 ctime。它还跟踪上次访问时间:atime。它通常只使用 mtime 因为这是最后一次修改时间,这是最有用的。 (2认同)
  • @Coroos:`ctime` 不是创建时间。这是 inode 更改时间,并在文件的属性(例如所有者或权限)更改或修改文件时更新。一些文件系统确实支持出生时间,但内核不支持。统计显示一个空的出生时间。请参阅 http://unix.stackexchange.com/a/91200 请注意,OS X 支持出生时间 `stat -f %SB filename ` (2认同)