forループのファイルサイズ

forループのファイルサイズ

forループでstatを使用して、フォルダ内の各ファイルのファイルサイズを取得しようとしています。次に、このエラーが発生する理由を知っていますが、まだ修正する知識がありません。

#!/bin/bash

for file in .* *; do
     size=$(stat --printf="%s")
     echo $size
done

ただし、statにファイル名がないため、論理的に次のエラーが発生します。

stat: missing operand
Try 'stat --help' for more information.

statが各ファイルのファイル名を取得するにはどうすればよいですか(ファイルのみ)フォルダに?

編集:Powershellの背景に「$_」変数を使用します。 Unixシェルも同様の変数を提供しますか?

答え1

statエラーを引き起こした引数(ファイル名)を指定していません。

変数を使用してfile各ファイル名を保存して繰り返しますが、ファイル名をパラメータとして指定しませんstat。つまり、$file(変数の値file)をに渡す必要がありますstat

1行ですべての操作を実行できます。

for file in .* *; do stat -c '%s-%n' "$file" ; done

printf出力形式を主張するには、次のものが必要です\n

for file in .* *; do stat --printf='%s-%n\n' "$file" ; done

%nまた、表示されるファイルのサイズを確認できるように、ここに何かを追加しました。

編集する:

ディレクトリを除くファイルでのみこのコマンドを実行するには、追加のチェックを使用する必要があります。ここでは、 test[)組み込み関数を使用して通常のファイルであるfileことを確認し、その場合は終了コード0を返し、[ -f "$file" ]そのファイルで()を&&実行します。stat

for file in .* *; do [ -f "$file" ] && stat -c '%s-%n' "$file" ; done

関連情報