gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 00:56:18 25 4
gpt4 key购买 nike

我想列出文件大小都在一个范围内的目录。我的解决方案是查看每个目录,如果它的所有文件大小都在范围内,则显示出来。我想知道是否存在更简单的方法来检查 find 命令或任何其他类似命令中的开关。

例如:范围= 10 - 20

dir1:
f1 size=12
f2 size= 19

dir2:
f3 size=22
f4 size=11

OUTPUT = dir1

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

最佳答案

4ae1e1借用代码的评论:

在每个命令行指定的子目录中找到规则的第一个异常(exception)(如果有的话)。如果允许,请打印它。

dir_filesize_rangefilter() {
# args: lo hi paths...
# sizes in MiB
# return value: dir names printed to stdout
local lo=$1 hi=$2
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”就会中断或者其他的东西。如果你真的想对有效的文件名保持偏执(因为你必须使用 while IFS= read 循环或其他允许的东西来解析它的输出),你可以将这个添加允许的目录到一个数组,而不是将它们打印到 stdout任何字符,并且仍然会在包含换行符的目录名称上中断。)

显然 SO 的语法高亮不知道 $(command substitution) 中引号的引用规则:/

关于linux - 列出文件大小都在一个范围内的目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33970309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com