Могу ли я сократить этот фильтр, который находит размер диска более 100 ГБ?

En el servidor, haz:

tar c file1 file2 dir1 file3... | nc -l 5000

Luego, en el cliente, haz:

nc server 5000 | tar x

O, más lento, pero más seguro:

ssh server tar c file1 file2 dir1 file3... | tar x

Por ejemplo:

$ ssh localhost 'cd /etc; tar c passwd nsswitch.conf' | (d=$(mktemp -d); tar xv -C "$d"; ls -l "$d"; rm -r "$d")
passwd
nsswitch.conf
total 8
-rw-r--r-- 1 muru muru  529 Feb 16  2017 nsswitch.conf
-rw-r--r-- 1 muru muru 2631 Apr 24 18:18 passwd
12
01.08.2019, 21:52
3 ответа

попробуй

lsblk| awk '$4 ~ /G$/ && $4+0 > 100 {print $1}'

это будет выполнять поиск и фильтрацию одновременно.

  • $4 ~ /G$/получить файл с размером в G
  • $4+0 > 100получить размер более 100G
  • {print $1}напечатать ИМЯ

как правило, вам не нужно использовать grepи awkв одном канале.

чтобы получить только диск (и без раздела):фильтрация awk

lsblk| awk '$4 ~ /G$/ && $4+0 > 100 && $6 == "disk"  {print $1}'

где

  • $6 == "disk"выбрать только столбец с диском

чтобы получить только диск (и без раздела):фильтрация lsblk

lsblk --nodeps| awk '$4 ~ /G$/ && $4+0 > 100 {print $1}'

где

  • --nodeps:-d, --узлы не печатают ведомые устройства или держатели
6
27.01.2020, 19:54

Вы можете указать желаемую форму вывода изlsblk:

% lsblk -nblo NAME,SIZE
mmcblk0   15931539456
mmcblk0p1   268435456
mmcblk0p2 15662038528

Используемые опции:

-b, --bytes
      Print the SIZE column in bytes rather than in human-readable format.

-l, --list
      Use the list output format.

-n, --noheadings
      Do not print a header line.

-o, --output list
      Specify which output columns to print.  Use --help to get a list of  all  supported
      columns.

Тогда фильтрация упрощается:

% lsblk -nblo NAME,SIZE | awk '$2 > 4*2^30 {print $1}' # greater than 4 GiB
mmcblk0
mmcblk0p2

В вашем случае это будет 100*2^30для 100 ГБ или 100e9/ 1e11для 100 ГБ.

28
27.01.2020, 19:54

Вы также можете указать lsblkвыводить в формате JSON и выполнять фильтрацию с помощьюjq:

$ lsblk -Jb | jq -r '..|select(.size? >= 1e11).name'
sda
sda2

Или:

$ lsblk -Jb | jq -r '..|select(.type? == "disk" and.size? >= 1e11).name'
sda

Чтобы ограничить записи типа disk.

(1e11составляет 100 ГБ. Замените на107374182400(или100*1024*1024*1024)для 100 ГиБ. Из-за округления,lsblkсам по себе без -bсообщает 100G для размеров от 99,9278 до 100,0488 ГиБ (по какой-то причине))

С помощью lsblk -OJb, lsblkсообщает всю доступную информацию, что позволяет сделать более точный -детальный выбор или вывести более или более релевантную информацию.

Вы также можете получить информацию напрямую от /sys. Сzsh:

$ printf '%s\n' /sys/class/block/*(e'[(($(<$REPLY/size) * 512 >= 1e11))]':t)
sda
sda2
18
27.01.2020, 19:54

Теги

Похожие вопросы