我知道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天的替代方案也可以完成这项工作。
答案 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 {} + \
;