「長いリスト形式」を使用せずにlsと実際のファイルサイズ

「長いリスト形式」を使用せずにlsと実際のファイルサイズ

Linuxlsコマンドにはこれらのオプションがあります。

   --block-size=SIZE
          scale sizes by SIZE before printing them; e.g., '--block-size=M' prints sizes in units of  1,048,576  bytes;  see
          SIZE format below


   -l     use a long listing format

          list subdirectories recursively

   -s, --size
          print the allocated size of each file, in blocks

私はこれがls -l実際のファイルサイズとls -s --block-size=1ファイルを保存するために割り当てられたディスク容量の量であると仮定します。 (この例では、991232 = 968x1024 = 968Kです。)

$ ls -s --block-size=1  summary.pdf 
991232 summary.pdf
$ ls -l summary.pdf 
-rwxrwx---. 1 chris chris 989838 May  1  2015 summary.pdf

「長いリスト形式」では、追加情報なしでファイルサイズをバイト単位で取得できますか?

答え1

カスタムフォーマットを使用できますstat

stat -c'%s' summary.pdf 

実際のファイルサイズ(バイト)が出力されます。ブロックを割り当てるには、%b割り当てられたブロック数と%B各ブロックのブロックサイズ(バイト単位)を使用します。

これはワイルドカードと追加されたファイル名にも適用されます%n。その他の書式設定オプションについては、マニュアルページを参照してください。

答え2

lsサイズとファイル名のみを表示する代替形式が必要な場合は、この方法を使用できます。

ls -l | sed "s/  */ /g" | cut -d ' ' -f 5,9-

または:

alias size_plus_name="sed 's/  */ /g' | cut -d ' ' -f 5,9-"
ls -l | size_plus_name

lsスイッチまたはコマンドライン引数にこの方法を使用してください。を含めることを忘れないでください-l

注目!ファイル名にスペースが含まれていない場合にのみ有効です。
しかし、5-9-(代わりに5-9)wspを含むファイル名を処理しようとしています。
(下記@Scottのコメントを参照)

答え3

du*をファイル名に変更します。

du -s -B 1 *
du -s -B 1 * | cut -f 1

statディレクトリ以外は他と同じです。du再帰サイズが報告されます(例:99999)、stat4096、またはブロックサイズが報告されます。


findまた有効:stat

find * -maxdepth 1 -printf "%s\n"
%p     File's name.
%s     File's size in bytes.

%f     Print the basename; the file's name with any leading directories removed

https://man7.org/linux/man-pages/man1/find.1.html

関連情報