UNIX查找:-newer选项的对面存在?

时间:2011-06-30 15:02:54

标签: unix find

我知道unix的find命令有这个选项:

find -version
GNU find version 4.1

    -newer file Compares the modification date of the found file with that of
        the file given. This matches if someone has modified the found
        file more recently than file.

是否有一个选项可以让我找到的文件而不是某个文件。我想删除目录中的所有文件进行清理。所以,我会发现所有文件都超过N天的替代方案也可以完成这项工作。

6 个答案:

答案 0 :(得分:35)

您可以使用!否定-newer操作,如下所示:

find . \! -newer filename

如果您想在7天前找到上次修改过的文件,请使用:

find . -mtime +7

<强>更新

要避免匹配您要比较的文件,请使用以下内容:

find . \! -newer filename \! -samefile filename

答案 1 :(得分:7)

你可以使用否定:

find ... \! -newer <reference>

您也可以尝试-mtime / -atime / -ctime / -Btime系列选项。我不会立即记住它们是如何工作的,但在这种情况下它们可能会有用。

小心删除find操作中的文件,尤其是以root身份运行的文件;有很多方法,同一系统上的非特权恶意进程可以欺骗它删除你不想删除的东西。我强烈建议您阅读Deleting Files的整个“GNU find manual”部分。

答案 2 :(得分:4)

如果您只需要文件早于文件“foo”而不是foo本身,请使用否定按名称排除文件:

find . ! -newer foo ! -name foo

答案 3 :(得分:2)

请注意,否定更新意味着“更旧或相同的时间戳”:

正如您在此示例中看到的,还返回了相同的文件:

thomas@vm1112:/home/thomas/tmp/ touch test
thomas@vm1112:/home/thomas/tmp/ find ./ ! -newer test
./test

答案 4 :(得分:1)

不幸的是,发现并不支持这一点 ! - 更新并不意味着更老。它只表示不是更新,但它也匹配具有相同修改时间的文件。所以我宁愿使用

for f in path/files/etc/*; do
    [ $f -ot reference_file ] &&  {
        echo "$f is older" 
        # do something
    }
done

答案 5 :(得分:0)

find dir \! -newer fencefile -exec \
  sh -c '
    for f in "$@"; do
      [ "$f" -ot fencefile ] && printf "%s\n" "$f"
    done
  ' sh {} + \
;