如何在目录和子目录中找到最新修改的文​​件?

如何在目录和子目录中找到最新修改的文​​件?

如何使用“find”命令在目录和子目录中找到最新修改的文​​件?我只需要获取一个文件。

答案1

在 Linux 中你可以使用

find . -type f -printf "%TY-%Tm-%Td %TT %p\n" | sort | tail -n 1

这将列出所有文件(-type f)并打印带有时间戳的文件,然后排序并仅打印最后一个。

如果你不想打印时间戳,你可以使用

find . -type f -printf "%TY-%Tm-%Td %TT %p\n" | sort | tail -n 1 | cut -d " " -f 3-

答案2

由于如果文件列表太大,排序会崩溃,因此这里提供另一种解决方案:

ls -lRU --time-style=long-iso "$PWD"/* | awk 'BEGIN {\
    cont=0; newd=20000101; \
} { \
    gsub(/-/,"",$6); if (substr($0,0,1)=="/") \
    { \
        pat=substr($0,0,length($0)-1)"/"; $6="" \
    }; \
    if( $6 ~ /^[0-9]+$/) { \
        if ( $6 > newd ) { \
            newd=$6; \
            newf=$8; \
            for(i=9; i<=NF; i++) { \
                newf=newf $i; \
            } \
            newf=pat newf; \
        }; \
        count++; \
    } \
} END { \
    print "newest date: ", newd, "\nFile:", newf, "\nTotal compared: ", count \
}' 

只需粘贴到 bash 中。

我从@Dr-Beco 的回答中获取了此代码如何在目录树中找到最旧的文件 并修改了代码以显示最新文件。有关说明,请点击链接。

如果你想要一行代码,去掉 \+newline 就可以得到

ls -lRU --time-style=long-iso "$PWD"/* | awk 'BEGIN { cont=0; newd=20000101;} {gsub(/-/,"",$6); if (substr($0,0,1)=="/"){pat=substr($0,0,length($0)-1)"/"; $6=""};if( $6 ~ /^[0-9]+$/) {if ( $6 > newd ) {newd=$6;newf=$8;for(i=9; i<=NF; i++) {newf=newf $i;}newf=pat newf;};count++;}} END {print "newest date: ", newd, "\nFile:", newf, "\nTotal compared: ", count}' 

还没有找到只显示文件日期而不显示目录的方法。试过了

ls --classify |grep -v /$

它应该只是从 ls 输出中删除所有目录。但这不知何故破坏了代码。

相关内容