BASH で読み取り可能なサイズをバイト単位ではなくファイル サイズで取得する方法

BASH で読み取り可能なサイズをバイト単位ではなくファイル サイズで取得する方法

私のシェル ファイルの内容は次のとおりです。

FILENAME=/var/lib/backups/html-backup/backup-15-04-2016.tar.gz;
FILESIZE= $(ls -lah $FILENAME | awk '{ $FILESIZEINGB = $5}')
echo "Size is $FILESIZEINGB ."

ファイルサイズを読み取り可能な形式で確認できない理由を教えてください。

$FILESIZEINGB が設定されていないようで、出力に結果が表示されませんecho

答え1

子プロセスからシェル変数を設定することはできません。そのため、設定はFILESIZEINGBいずれにしても機能しません (また、構文で別の意味を持つため機能しませんawk)。

次のように使用しますdu -h:

FILESIZEINGB=$(du -h "$FILENAME" | awk '{print $1}')

また:

  • の後にスペースを入れないでください=

答え2

または、使用したくない場合はdu:

FILESIZE=$(ls -lah $FILENAME | awk '{ print $5}')
echo "Filesize is $FILESIZE"

答え3

誰かが 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

関連情報