Bash - 带有文件列表的 txt + ctime

Bash - 带有文件列表的 txt + ctime

是否可以创建一个 txt,列出目录中的文件夹以及该文件夹的创建日期(或 ctime)?

就像是:

文件夹.txt:

文件夹1 2016/08/02

文件夹A 2016/08/03

这是我现在所拥有的,但它没有注明创建日期:

find /directory/* -type d -exec bash -c 'echo ${0#/directory/}' {} \; > /directory/folders.txt

答案1

请注意,ctimeinode改变状态时间,而不是创建时间。创建时间又称为 inode 诞生时间,有时称为 ,但btime并非在所有 Unices 或所有文件系统上都可用。

例如,在 Linux 上,出生时间记录在大多数本机文件系统上,但目前没有 API 可以检索它。

无论如何,这是索引节点最后一次激活。这并不反映数据放入其中的时间(通常在创建 inode 之后发生),也不一定反映文件链接到目录的时间(按您当前引用的名称)当文件被重命名或链接到另一个目录(或与不同的名称相同)时,出生时间不会更新。

最好的方法通常是使用最后修改时间。这更好地代表了文件中数据的年龄。

使用 GNU find,您可以使用:

find /directory -mindepth 1 -maxdepth 1 -type d -printf '%P %TY/%Tm/%Td\n'

zsh

zmodload zsh/stat
(cd /directory && zstat -LF '%Y/%m/%d' +mtime -- *(D/))

(为您提供与 相比的排序列表find。您可以使用oNglob 限定符禁用排序,或使用 修改时间排序om

答案2

通常ls -lc应该这样。但这显示了文件和目录。

所以我们可以作弊,并要求它*/输入;只有目录会匹配它。但我们还需要-d标志:

ls -lcd */

如果您想要特定的布局,则ls不一定需要最佳输出。

stat如果您有的话,我们可以使用:

stat --format="%n %z" */

如果符号链接指向一个目录,那么这两个都将遵循符号链接。

如果您不希望这样,那么我们可以使用find

find * -maxdepth 0 -type d -printf "%p %c\n"

如果你想要递归,那么

find * -type d -printf "%p %c\n"

相关内容