按创建日期对目录中的文件进行排序(出生)

在我的下载文件夹中我有很多文件。我首先需要一种方法来安排它们按类型排列的类型第二个文件变成我添加的类型(或者可以说下载或出生(如果我没有错))他们到我的下载文件夹。 请看一下这里输入的链接说明在我的下载目录中我有pdf,zip等等,当我进入我的下载目录时首先我想看到我的tar.gz在一起(按类型排列)第二我需要我的焦油。 gz文件有点时间我添加到这个目录。例如我正在寻找第五个最年轻的出生时间tar.gz文件。

我之前的回答是从这个错误的陈述开始的:

Linux不存储文件创建时间

是 – Linux内核不提供API来从文件系统获取创建时间戳。

但是因为它是用wiki编写的ext4提供文件创建时间戳:

ext4还增加了对日期创建的时间戳的支持。 但是,正如Theodore Ts’o所指出的那样,虽然很容易在inode中添加额外的创建日期字段(从技术上支持ext4中的日期创建时间戳),但修改或添加必要的系统更加困难调用,如stat()(可能需要新版本)和依赖它们的各种库(如glibc)。

另外在unix.stackexchange中也有回答

Several file systems store the file creation time, although there is no standard name for this field: - ufs2 → st_birthtime - zfs → crtime - ext4 → crtime - btrfs → otime - jfs → di_otime 

这是一个很好的问题/答案如何找到文件创建标记。 由@terdon编写的脚本:

 get_crtime() { for target in "${@}"; do inode=$(ls -di "${target}" | cut -d ' ' -f 1) fs=$(df --output=source "${target}" | tail -1) crtime=$(sudo debugfs -R 'stat <'"${inode}"'>' "${fs}" 2>/dev/null | grep -oP 'crtime.*--\s*\K.*') printf "%s\t%s\n" "${target}" "${crtime}" done } 

将此脚本添加到.bashrc。

现在使用这个脚本你可以得到你想要的。

转到要排序的文件夹

 $ cd ~/Downloads $ get_crtime * | sed -r 's/\s+/ /g' | cut -d" " -f1,3,4,6 | sort -k2M -k3,4n 

对于tar.gz文件

 $ get_crtime *.tar.gz | sed -r 's/\s+/ /g' | cut -d" " -f1,3,4,6 | sort -k2M -k3,4n 

来源

  • 如何查找创建日期
  • 我找到脚本的地方
  • Linux上的哪些文件系统存储创建时间?
  • Wiki ext4
  • 了解ext4时间戳