unset mon
[ $(date +%u) -eq 1 ] && mon='Fri'
yday=$(date --date="last ${mon}day" +"%d_%m_%y")
Итак, если сегодня понедельник, то date+%u
дает 1
, поэтому mon
переменная установится в Fri
, а строка --date будет last Friday
. В противном случае это будет последний день
, так как mon
останется несброшенным (пустым)
Если вы можете получить доступ к необработанному диску (без шифрования ), вы можете:
dd if=/dev/sda bs=1M count=100 2>/dev/null | tr -d '\0' | wc -c
Это считывает 100 мегабайт с диска, удаляет все нули и подсчитывает количество оставшихся байтов.
Я не знаю, является ли это самым быстрым методом, но он должен быть достаточно быстрым, если предположить, что нулей больше, чем данных.
Приведенная выше команда будет считывать 100 раз 1Mega byte
или100*2^20
(104857600 )байт (, если они доступны ). Попробуйте ввести небольшое число (10 или 100 ), чтобы проверить скорость и качество работы команды. Чтобы прочитать весь диск, просто удалите параметр count, пусть сторона диска ограничивает команду.
Извлечение двух значений, которые имеют значение (полное количество байтов на диске и количество ненулевых -байтов )команда становится более сложной:
$ time { { { sudo dd if=/dev/sdX bs=100M 2> >(grep -oP '[0-9]+(?=\s*bytes)' 1>&2 ) | tr -d '\0' | wc -c; } 2>&1; } | { read -d '' a b; echo "$b/$a"; }; }
Что напечатает два значения как :non-zero/disk
, например:
766568020/999292928
вычислить 1-766568020/999292928
, чтобы найти процент нулевых байтов:
$ bc <<<'(1-766568020/999292928)*100'
23.28895776994831289400