1

7.4M などの値を取り込めるパラメーターに基づいてファイルを検索しようとしていますが、使用できないようです。

FileSize=7.4M
find . -size $FileSize

これを行うと、「不正な末尾文字」になります

4

3 に答える 3

2

おそらく、ビット演算を使用できます

FileSize=7
find . -size $(( FileSize << 20 ))
于 2013-02-13T03:02:34.223 に答える
0

入力を整数に正規化するこの関数を作成しました。

normalize() { echo "$1" | awk -FM '/M/ { printf "%dk", $1*1024 }; !/M/ { print $1 }'; }

この関数を定義した後、次のように使用します。

$ echo $(normalize 7.4M)
7577k
$ echo $(normalize 15k)
15k

したがって、次のようにコードを記述できます。

find . -size $(normalize $FileSize)

しかし、とにかくそれに対してお勧めします。このようなシンタックスシュガーをbashで実行するのは難しいことであり、小さなバグのレシピです。たとえば、normalize()のユーザーは、「15.5k」が機能することを期待しているかもしれませんが、そうではありません。また、ユーザーは7.4Mがこの関数によって丸められなかったことを期待できましたが、丸められました(7.4mb = 7759462.4バイトであるため、ファイルを正確に7.4mbにする方法はありません)。

chepnerが提案したように、findの構文に従うことをお勧めします。

また、ほとんどの場合、おそらく次のようなものを使用する必要があります

find . -size +7M -and -size -8M

一定の間隔(この例では、7MBから8MBの間)でファイルを検索します。最初に+または-がないと、この正確なサイズのファイルのみが検索されます。しかし、私が言ったように、正確に7.4mbのファイルはありません。このサイズは、概算値を報告したプログラムから取得した可能性があります。

于 2013-02-13T13:01:15.873 に答える