如何使用find命令查找创建时间和修改时间相等的任何文件



我知道我可以使用带有-mtime和-ctime等选项的find命令,但这些选项需要在命令中设置一个数字。

在我的情况下,我不在乎时间是多少,我只想找到-ctime和-mtime彼此相等的任何文件。(我在Mac上,所以从技术上讲,它是-mtime和-Btime(

我发现如何做到这一点比我预想的要困难。

编辑:我正试图在macOS中做到这一点,文件系统是APFS

正如您在这里看到的,创建时间并没有真正存储在类Unix系统上。有些文件系统可能支持此功能,您可以检查stat file命令的输出,对我来说,此输出的最后一行是Birth: -。因此,如果您确实有创建时间,您可以获得从未修改过的文件:

find . -type f -print0 | xargs -0 stat -c "%n %W %Y" |
awk '$NF==$(NF-1) {$(NF-1)=$NF=""; print}'

%W将打印出生时间(如果不支持,可能是0(,%Y将打印最后一次修改时间。上面的最后一个awk命令只打印这些时间匹配的文件名。


对于macOS:

find . -type f -print0 | xargs -0 stat -f "%N %B %m" |
awk '$NF==$(NF-1) {$(NF-1)=$NF=""; print}'

另请参阅macOS统计手册页

我认为这在find中是不可能的,但您可以使用外部工具过滤这些文件,例如shell:

find . -type f -printf '%T@ %C@ %fn' | while read mtime ctime fname; do
[ "$mtime" == "$ctime" ] && echo "$fname"
done

相关内容

最新更新