列出按大小排序的目录和子目录中的所有文件的脚本,仅列出文件名而不列出完整路径

列出按大小排序的目录和子目录中的所有文件的脚本,仅列出文件名而不列出完整路径

我正在寻找一个脚本,该脚本列出目录和子目录中的所有文件(按大小排序),仅列出文件名而不列出完整路径。

find . -type f -exec ls -lhS {} \+有效但给出了路径。

find . -type f -printf '%f\n'也有效,但我不确定如何对其进行排序,或者是否也可以在此处包含文件大小。

答案1

如果您find支持它,您可以使用%sin -printf(“文件大小以字节为单位”)。

如果您sort支持空分隔输入 ( -z),则可以执行以下操作:

find . -type f -printf "%s %f\0" | sort -nz | tr '\0' '\n'

答案2

如果您的系统支持zsh命令,那么bash您可以在脚本中运行

zsh -c 'ls -lhS -- **/*(.D)'

这可能需要一些解释:

  • zsh:除此之外bash,更强大的 shell 具有很多功能
  • -c:将下一个参数作为要执行的命令zsh
  • ls -lhS:根据你的问题这是你要执行的命令
  • --:处理可能以-字符开头的奇怪文件名
  • **:全局匹配多个目录
  • *: 标准全局- 匹配这些目录中的所有文件
  • ():全局限定符指定应选择哪些文件以及选择顺序
  • .:我们仅选择纯文本文件(type f相当于find
  • D:在结果中包含点文件(隐藏文件)

重新阅读问题后,我想您宁愿从结果中删除整个路径,而不仅仅是前导部分。这仍然可以通过以下方式完成zsh

print -l **/*(.OLDe:'reply=${REPLY##*/}':)

但这可能有点太多了,因为这zsh毕竟不是关于技巧的问题,所以我将建议使用find+ 的“标准”解决方案sed

find . -type f -exec sh -c 'ls -lhS "$@" | sed "s| \..*/| |"' {} \+

相关内容