3

Как я могу удалить каталоги, которые меньше, скажем, 1000 КБ?

У меня уже есть список файлов из команды:

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 / . - +

3 ответа3

2

Попробуй du -sk * | awk 'BEGIN { FS="\t" }; { if($1 < 1000) print $2 }' | grep '' -Z | xargs -0 -s 1024 rm -rf . Будь осторожен с rm !

1

Проблема с ответом whitequark в том, что grep добавляет нули, но awk убирает их. Кроме того, вы можете захотеть ограничить команду du только каталогами, поскольку, как вы говорите, вы хотите измерять и удалять в зависимости от размера. Добавление косой черты после звездочки делает это.

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

"Grep '' -Z" не работает для меня, но tr делает:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .