Вот что у меня есть в моем файле оболочки:
FILENAME=/var/lib/backups/html-backup/backup-15-04-2016.tar.gz;
FILESIZE= $(ls -lah $FILENAME | awk '{ $FILESIZEINGB = $5}')
echo "Size is $FILESIZEINGB ."
Скажите, пожалуйста, почему я не вижу размер файла в читабельном виде?
Кажется, $ FILESIZEINGB не установлен, и я не могу видеть результат в выводе эха.
Заранее спасибо!
Вы не можете установить переменную оболочки от дочернего процесса - таким образом, установка FILESIZEINGB
не работала бы так или иначе (и она не будет работать, потому что это означает что-то еще в awk
синтаксис).
Просто использование du -h
:
FILESIZEINGB=$(du -h "$FILENAME" | awk '{print $1}')
Также:
=
. Или если Вы не хотите использовать du
:
FILESIZE=$(ls -lah $FILENAME | awk '{ print $5}')
echo "Filesize is $FILESIZE"
Я нашел, что кто-то сделал остроту AWK, и она имела ошибку, но я зафиксировал ее. Я также добавил в петабайтах после терабайт.
FILE_SIZE=234234 # FILESIZE IN BYTES
FILE_SIZE=$(echo "${FILE_SIZE}" | awk '{ split( "B KB MB GB TB PB" , v ); s=1; while( $1>1024 ){ $1/=1024; s++ } printf "%.2f %s", $1, v[s] }')
Рассмотрение stat
не находится в каждой системе, я использовал бы решение AWK. Пример; Raspberry Pi не имеет stat
, но он действительно имеет awk
.