使用 find 命令按大小列出前 5 个图像文件

使用 find 命令按大小列出前 5 个图像文件

大家好,
我想列出给定文件夹中的前 5 个图像文件 (png、jpg)。最好的方法是什么?我目前正在使用以下方法,但它没有给出正确的输出:

find . \( -iname \*.png -o -iname \*.jpg \)  -exec ls -lrhS {} \; | sort -n | head -5 | awk '{print $9, "=>",$5}'

当我不吹管的时候命令,我发现输出排序不正确。我该如何实现

答案1

如果“前 5 名”是指按大小排序,那么您需要说明sort按哪一列排序;默认将按顺序浏览所有列,这意味着它将首先按链接数排序。此外,如果没有某种扩展,“人类可读”的大小根本无法正常排序,除非在 GNU 中sort;可移植性sort -n不知道诸如、等后缀BK还请注意,您会丢失您要求的排序信息,ls因为它是在受控制的单个文件上运行的find。然后sort从最低到最高排序,因此即使修复了这一点,您也会得到五个最小的图片来自。(之前head的 是拼写错误吗?您说只有当管道失败时才运行。)||awkawkfind

结合所有这些,通过使用xargs批处理和组合head进行优化awk,你想要的是确保你有 GNU sort,然后使用

find . \( -iname \*.png -o -iname \*.jpg \) -print0 | xargs -0 ls -lh | sort -k5gr,5 | awk 'NR <= 5 {print $9, "=>", $5}'

答案2

find . \( -iname "*.png" -o -iname "*.jpg" \) -printf "%k\t%p\n" | sort -rn | head -5
  1. 根据您的要求在当前目录中使用查找(我假设您的意思是“当前目录和子目录,否则添加-maxdepth 1)。
  2. 打印大小(以 1K 块为单位),然后是制表符,然后是文件名。
  3. 按数字反向排序。
  4. 选出前五行。

瞧!

(可能的警告是文件名包含换行符,但实际上我从未见过这些。需要进行一些简单的修改才能解决这个问题)

答案3

感谢大家为我指明了正确的方向。我认为我可以使用以下方法使其工作:

find . \( -iname \*.png -o -iname \*.jpg \) -print0 | xargs -0 ls -l | sort -k5 -r | head -5

我将处理此输出以获取所需格式的输出(即带有 B、K 等后缀)

答案4

非常简单明了:

find . -ls | sort -nk7 | tail -5

相关内容