linux – 列出文件大小都在一个范围内的目录

linux – 列出文件大小都在一个范围内的目录,第1张

概述我想列出文件大小都在一个范围内的目录.我的解决方案是查看每个目录,如果它的所有文件大小在范围内,则显示出来.我想知道是否有更容易的方法来检查像find命令或任何其他命令这样的开关. 例如:范围= 10 – 20 dir1:f1 size=12f2 size= 19dir2:f3 size=22f4 size=11OUTPUT = dir1 dir2被排除在外,因为f3超出10-20 我想列出文件大小都在一个范围内的目录.我的解决方案是查看每个目录,如果它的所有文件大小在范围内,则显示出来.我想知道是否有更容易的方法来检查像find命令或任何其他命令这样的开关.

例如:范围= 10 – 20

dir1:f1 size=12f2 size= 19dir2:f3 size=22f4 size=11OUTPUT = dir1

dir2被排除在外,因为f3超出10-20范围.不排除dir1,因为其所有文件的大小都在该范围内.

解决方法 借用 4ae1e1评论的代码:

在每个命令行指定的子目录中查找规则的第一个例外(如果有).打印,如果允许的话.

dir_filesize_rangefilter() {    # args: lo hi  paths...    # sizes in MiB    # return value: dir names printed to stdout    local lo= hi=    shift 2  # "$@" is Now just the paths    for dir; do   # in "$@"   is implicit        local safedir=$dir        [[ $dir = /* ]] || safedir=./$dir   # make sure find doesn't treat weird -filenames as -options        # find the first file smaller than lo or larger than hi        [[ -z "$(find "$safedir" -type f                \( -size "-${lo}M" -o -size "+${hi}M" \)               -print -quit )"        ]] && printf '%s\n' "$dir"    done}

我使用“printf”,因为如果其中一个目录名以-e或其他东西开头,则“echo”会中断.你可以将这个添加允许的目录添加到一个数组,而不是将它们打印到stdout,如果你真的想对有效的文件名感到偏执(因为你必须用一个IFS = read循环或者某些东西来解析它的输出允许任何字符,并且仍然在包含换行符的目录名称上中断.)

显然,SO的语法高亮不知道$(命令替换)中引号的引用规则:/

总结

以上是内存溢出为你收集整理的linux – 列出文件大小都在一个范围内的目录全部内容,希望文章能够帮你解决linux – 列出文件大小都在一个范围内的目录所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1049857.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存