を使用すると、ls -lh
ファイルサイズを取得できます。
ファイルサイズが1MBより大きいことを確認し、以下のようなメッセージを出力する方法はありますか? 100mb、1gb、10gb、100kbなど、さまざまなサイズのファイルがある可能性があります。
if [ $FileSize > 1MB ];
then
echo "File size is grater than 1MB"
fi
if
ステートメントを使用してファイルサイズを確認する方法はありますか?
答え1
find
以下の特定のファイルに使用します$filepath
。
if [ -n "$(find "$filepath" -prune -size +1000000c)" ]; then
printf '%s is strictly larger than 1 MB\n' "$filepath"
fi
特定のファイルのサイズをfind
照会するために使用されます。$filepath
サイズが1000000バイトより大きい場合、find
ファイルのパス名が印刷され、そうでなければ何も生成されません。-n
文字列の長さがゼロでない場合、テストは真です。この場合、find
何かが出力されたことを意味し、これはファイルが1MBより大きいことを意味します。
あなたはこれを尋ねていません:いくつかのファイルで1MBを超えるすべての一般的なファイルを見つけて、$dirpath
各ファイルに対して短いメッセージを印刷します。
find "$dirpath" -type f -size +1000000c \
-exec printf '%s is larger than 1 MB\n' {} +
このコードはすべてのUnixに移植可能でなければなりません。
また、テストで<
またはを使用すると、>
関連する2つの文字列が特定のアルファベット順にソートされているかどうかがテストされます。これらの演算子は数値比較を実行しません。これを行うには、-lt
(「より小さい」)、-le
(「より小さいか等しい」)、-gt
(「より大きい」)、または-ge
(「大きいか等しい」)、-eq
(「等しい」)、または-ne
(「を使用します。等しくない」)。この演算子は整数比較を実行します。
答え2
ファイルを一度に1つずつ照会したい場合は、stat
サイズなど、特定のファイルのさまざまな属性を照会するための一般的なツールです。
FileName="foo"
FSize=1048576
if [ $(stat -f %z "$FileName") -gt $FSize ]; then
printf "File %s is larger than %d bytes.\n" "$FileName" $FSize
fi
あなたが本当に探しているものが多数のファイルを照会し、特定のサイズ以上のファイル名だけを抽出する方法であれば、これはfind
あなたが望むものかもしれません。
DIRECTORYのファイルセットが与えられたら、FSizeバイトより大きいファイルを見つけます。
DIRECTORY="/path/to/your/files"
FSize="1M"
find $DIRECTORY -type f -size +$FSize