linux 查找给定范围大小的目录

bakd9h0s  于 2023-05-06  发布在  Linux
关注(0)|答案(3)|浏览(257)

我试图找到一个给定大小的目录,但它不显示。我在所需的目录上运行代码,然后运行

du -h --maxdepth 1

以确保目录具有我要查找的大小。当我跑步时:

find . -maxdepth 1 -type d -size +5M -size -3M

它什么都不显示。

2vuwiymt

2vuwiymt1#

您提供的是互斥的需求,因此没有匹配的。
使用 * 或 *。

find . -maxdepth 1 -type d \( -size +5M -o -size -3M \)

如果没有命中,可能-maxdepth 1上的目录都不符合条件。把它拿掉。

find . -type d \( -size +5M -o -size -3M \)

我认为你不会find很多目录〉5M,虽然。find报告的数据与du不同。这很像lsdu的问题。
也许你想要的是更像这样的东西

du -b | awk '$1<3000000||$1>5000000' # or
du -b | awk '$1<3145728||$1>5242880' | sort -n
0tdrvxhp

0tdrvxhp2#

如何在3 to 5MiB范围内找到dirs:

find . -maxdepth 1 -type d -exec bash -c '
        for d; do
            s=$(du -s -B M "$d" | sed -E "s/^([0-9]+).*/\1/")
            ((s>=3 && s<=5)) && echo "$d ${s}MiB"
        done
    ' bash {} +


find-size用于文件,而不是目录。
或者只处理当前目录:

du -sb */ | awk '$1>3000000 && $1<5000000'
soat7uwm

soat7uwm3#

find -type d -size并不像你想象的那样工作。它考虑ls -l显示的目录的大小,而不是目录内容(它们包含的文件)的总大小。如果您对内容的总大小感兴趣,则必须在find命令中使用du

find . -maxdepth 1 -type d -execdir bash -c \
  's=($(du -sb "$1")); (( 3145728 <= s[0] && s[0] <= 5242880 ))' _ {} \; -print

请注意,-size +5M -size -3M表示“* 严格大于5M严格小于3M*”,即使find目录大小是您所认为的,也显然不会返回任何内容。还要注意,由于舍入,-size -3M表示小于或等于2M-size +5M表示大于或等于6M

相关问题