查找早于 X 天的文件并按大小输出它们

查找早于 X 天的文件并按大小输出它们

我试图获取超过几天的文件,并根据其大小及其所有信息(大小、完整路径等 - 与 提供的类似内容ls)按降序排列它们。

虽然我能够找到较旧的文件:

find . -mtime +10

我无法列出所需的信息。

答案1

前提是你的文件路径不要包含换行符:

find . -mtime +10 -printf "%s %n %m %u %g %t %p" \( \
  -type l -printf ' -> %l\n' -o -printf '\n' \) | sort -k1,1 -n

find手动的, 部分Actions

  • %s 文件的大小(以字节为单位)。
  • %n 数量硬链接归档。
  • %m 文件的权限位(在八进制)。
  • %u 文件的用户名或数字用户身份如果用户没有名字。
  • %g 文件的组名或数字组ID如果该组没有名称。
  • %t 文件的最后修改时间,采用 C 返回的格式ctime功能。
  • %p 文件名。
  • %l 对象符号链接(如果文件不是符号链接,则为空字符串)。

顺便说一句:请注意POSIX find手册并未指定上述大部分操作。

答案2

此命令仅使用 和find的POSIX 功能ls

find . -type f -mtime +10 -exec ls -lS {} +

然而,它可能ls多次调用,如果有很大当前目录(或递归子目录)中与主目录匹配的文件数-mtime +10

当然,如果它调用ls多次,则排序只会在每次ls执行中完成,而不是在多个执行中完成。

不过,对于合理数量的文件来说,这可能是您的最佳选择。

答案3

zsh

ls -ldrS -- **/*(m+10)

或者避免双重排序(通过 zsh 按名称排序,通过 ls 按大小排序):

ls -ldrS -- **/*(m+10oN) # disable zsh sorting

或者(如果您ls支持-U未排序):

ls -ldU -- **/*(m+10oL) # disable ls sorting and have zsh sort by size

D如果您还想查看隐藏文件,请添加glob 限定符。

答案4

尝试这个:

find ./ -type f -mtime +10 -exec ls -ln {} \; | sort -r -k 5 -g

相关内容