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