如何查找大于某个大小的文件,并按最后修改日期对它们进行排序?

Mat*_*ski 6 bash find

我需要编写脚本来记下所选目录中的每个文件,这些文件大于某个大小.此外,我需要按大小,名称和最后修改日期对它们进行排序.

所以我做了前两个案例:

按大小排序

RESULTS=`find $CATALOG -size +$SIZE | sort -n -r | sed 's_.*/__'`
Run Code Online (Sandbox Code Playgroud)

按名称分类

RESULTS=`find $CATALOG -size +$SIZE | sed 's_.*/__' | sort -n `
Run Code Online (Sandbox Code Playgroud)

但我不知道如何按最后修改日期对结果进行排序.

任何帮助,将不胜感激.

gni*_*urf 11

如果您没有太多文件,最好的方法之一就是使用ls自己进行排序.

按名称排序并每行打印一个文件:

find $CATALOG -size +$SIZE -exec ls -1 {} +
Run Code Online (Sandbox Code Playgroud)

按大小排序并每行打印一个文件:

find $CATALOG -size +$SIZE -exec ls -S1 {} +
Run Code Online (Sandbox Code Playgroud)

按修改时间排序,每行打印一个文件:

find $CATALOG -size +$SIZE -exec ls -t1 {} +
Run Code Online (Sandbox Code Playgroud)

您还可以使用ls开关:使用长列表格式按修改时间(小优先)排序,具有人类可读的大小:

find $CATALOG -size +$SIZE -exec ls -hlrt {} +
Run Code Online (Sandbox Code Playgroud)

哦,你可能只想要find文件(并忽略目录):

find $CATALOG -size +$SIZE -type f -exec ls -hlrt {} +
Run Code Online (Sandbox Code Playgroud)

最后,一些评论:避免在bash中使用大写变量名(它被认为是不好的做法)并避免回退,$(...)而是使用.例如,

results=$(find "$catalog" -size +$size -type f -exec ls -1rt {} +)
Run Code Online (Sandbox Code Playgroud)

此外,您可能不希望将所有结果放在像上一行一样的字符串中.您可能希望将结果放在数组中.在这种情况下,使用mapfile这样:

mapfile -t results < <(find "$catalog" -size +$size -type f -exec ls -1rt {} +)
Run Code Online (Sandbox Code Playgroud)