删除小于 x 的目录

删除小于 x 的目录

如何删除小于 1000 KB 的目录?

我已经从命令中获得了一个文件列表:

du -sk * | sort -n > sort.txt

但我不知道该如何进行。


更新:

du -sk */ | awk 'BEGIN { FS="\t" }; { if($1 < 1000) printf "%s\0",$0 }' | sort -nrz | hexdump -C | head -n 10


00000000  31 36 09 32 20 50 69 73  74 6f 6c 73 20 46 74 2e  |16.2 Pistols Ft.|
00000010  20 54 2d 50 61 69 6e 20  26 20 54 61 79 20 44 69  | T-Pain & Tay Di|
00000020  7a 6d 2f 33 30 34 09 41  63 65 20 41 74 6b 69 6e  |zm/304.Ace Atkin|
00000030  73 2f 38 09 41 69 72 6d  61 74 65 20 66 65 61 74  |s/8.Airmate feat|
00000040  2e 20 4d 61 72 69 73 68  6b 61 20 50 68 69 6c 6c  |. Marishka Phill|
00000050  69 70 73 2f 31 36 09 41  6c 65 78 61 6e 64 65 72  |ips/16.Alexander|
00000060  20 4b 6f 77 61 6c 73 6b  69 20 66 65 61 74 2e 20  | Kowalski feat. |
00000070  42 61 72 63 61 20 42 61  78 61 6e 74 2f 35 34 34  |Barca Baxant/544|
00000080  09 41 6e 64 72 65 cc 81  73 20 66 65 61 74 20 44  |.Andre..s feat D|
00000090  4a 20 4d 69 6e 78 2f 31  36 09 41 73 69 61 20 43  |J Minx/16.Asia C|

输出

du -sk * | awk 'BEGIN { FS="\t" }; { if($1 < 1000) print $2 }'

类似于:

dirname
other dirname
other dirname with special chars / . - +

答案1

问题在于白夸克回答grep添加空值,但awk删除空值。此外,您可能希望将du命令限制为仅目录,因为这就是您要测量并根据大小删除的内容。在星号后添加斜线即可实现此目的。

du -sk */ | awk 'BEGIN { FS="\t" }; { if($1 < 1000) printf "%s\0",$2 }' | xargs -0 rm -rf

答案2

试试看du -sk * | awk 'BEGIN { FS="\t" }; { if($1 < 1000) print $2 }' | grep '' -Z | xargs -0 -s 1024 rm -rf。小心rm

答案3

“grep '' -Z”对我来说不起作用,但 tr 起作用:

du -sk * | awk 'BEGIN { FS="\t" }; { if($1 < 10) print $2 }' |tr '\n' '\0' |xargs -0 rm -rf

答案4

以下是 GitHub copilot 自动生成的内容

#!/bin/env bash

# recursively list all directories and their size with less than 10KB
find . -type d -print0 | while read -d $'\0' dir; do
    if [ $(du -s "$dir" | cut -f1) -lt 10 ]; then
        du -sh "$dir"
    fi
done

# ask for confirmation whether to delete the directories
read -p "Delete the above directories? [y/N] " -n 1 -r

# if yes, delete the directories
if [[ $REPLY =~ ^[Yy]$ ]]; then
    find . -type d -print0 | while read -d $'\0' dir; do
        if [ $(du -s "$dir" | cut -f1) -lt 10 ]; then
            rm -rf "$dir"
            echo "Deleted $dir"
        fi
    done
else # else, do nothing
    echo "Nothing deleted."
    exit 0
fi

相关内容