我试图找到一个给定大小的目录,但它不显示。我在所需的目录上运行代码,然后运行
du -h --maxdepth 1
以确保目录具有我要查找的大小。当我跑步时:
find . -maxdepth 1 -type d -size +5M -size -3M
它什么都不显示。
2vuwiymt1#
您提供的是互斥的需求,因此没有匹配的。使用 * 或 *。
find . -maxdepth 1 -type d \( -size +5M -o -size -3M \)
如果没有命中,可能-maxdepth 1上的目录都不符合条件。把它拿掉。
-maxdepth 1
find . -type d \( -size +5M -o -size -3M \)
我认为你不会find很多目录〉5M,虽然。find报告的数据与du不同。这很像ls和du的问题。也许你想要的是更像这样的东西
find
du
ls
du -b | awk '$1<3000000||$1>5000000' # or du -b | awk '$1<3145728||$1>5242880' | sort -n
0tdrvxhp2#
如何在3 to 5MiB范围内找到dirs:
3 to 5MiB
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用于文件,而不是目录。或者只处理当前目录:
-size
du -sb */ | awk '$1>3000000 && $1<5000000'
soat7uwm3#
find -type d -size并不像你想象的那样工作。它考虑ls -l显示的目录的大小,而不是目录内容(它们包含的文件)的总大小。如果您对内容的总大小感兴趣,则必须在find命令中使用du:
find -type d -size
ls -l
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。
-size +5M -size -3M
-size -3M
2M
-size +5M
6M
3条答案
按热度按时间2vuwiymt1#
您提供的是互斥的需求,因此没有匹配的。
使用 * 或 *。
如果没有命中,可能
-maxdepth 1
上的目录都不符合条件。把它拿掉。我认为你不会
find
很多目录〉5M,虽然。find
报告的数据与du
不同。这很像ls
和du
的问题。也许你想要的是更像这样的东西
0tdrvxhp2#
如何在
3 to 5MiB
范围内找到dirs:find
的-size
用于文件,而不是目录。或者只处理当前目录:
soat7uwm3#
find -type d -size
并不像你想象的那样工作。它考虑ls -l
显示的目录的大小,而不是目录内容(它们包含的文件)的总大小。如果您对内容的总大小感兴趣,则必须在find
命令中使用du
:请注意,
-size +5M -size -3M
表示“* 严格大于5M和严格小于3M*”,即使find
目录大小是您所认为的,也显然不会返回任何内容。还要注意,由于舍入,-size -3M
表示小于或等于2M
,-size +5M
表示大于或等于6M
。