特定のサイズ範囲内のファイルの削除

特定のサイズ範囲内のファイルの削除

特定のサイズ以下のファイルを削除したいです。たとえば、次のファイルのリストがあります。

-rw-r--r-- 1 smsc sys  558 Apr 30 13:07 stats.sfe.1.20120430130513.xml.Z
-rw-r--r-- 1 smsc sys  388 Apr 30 15:32 stats.sfe.1.20120430153013.xml.Z
-rw-r--r-- 1 smsc sys  386 Apr 30 15:36 stats.sfe.1.20120430153513.xml.Z
-rw-r--r-- 1 smsc sys  389 Apr 30 15:42 stats.sfe.1.20120430154013.xml.Z
-rw-r--r-- 1 smsc sys  390 Apr 30 16:02 stats.sfe.1.20120430160013.xml.Z
-rw-r--r-- 1 smsc sys  385 Apr 30 16:12 stats.sfe.1.20120430161013.xml.Z

上記のリストからサイズの異なるファイルのみを削除したい386bそして390b。次のコマンドを使用して、特定のサイズより大きいファイルを削除できることを知っています<size>

find . -size +<size>-delete

しかし、サイズが与えられた値より小さいファイルの境界を追加するには?

答え1

2つの基本色を連結できる-a明示的な演算子です。ANDこの例では、範囲の作成が使用されています-size

find . -size +386b -a -size -390b -exec rm -f {} \;

sizeは数値パラメータで、オプションで+sumの前に置くことができます-。からman 1 find

   Numeric arguments can be specified as

   +n     for greater than n,
   -n     for less than n,
    n      for exactly n.

答え2

find数字が必要なときはいつでも、+数字の前に記号を追加してこれより大きい数字を表すか、数字の前に記号を追加してこれより-小さい数字を表すことができます。これは厳格な不等式です。+3-7は、4、5、または6を意味します。

デフォルトでは、数字がバイト数であることを示すために-sizeサフィックスを追加する必要があります。c複数の基本色をリンクして接続を取得できます(一部のバージョンでは、色の間に-aORを入れることができます-and)。したがって:

find . -size +385c -size -391c -delete

zshでは利用可能ですL グローバル予選。基本単位はバイトです。のような文字はfind厳格な不等式を表します。+-

rm *(L+385-391)

(上記のコマンドはサブディレクトリに再帰されません。**/必要に応じてパターンの前に追加してください。)

答え3

範囲は単に上限です。そして下限。 ~からfind仕様:

式[-a]式

デフォルトの組み合わせ、AND演算子は、2つの基本演算子を並列して暗黙的に使用するか、オプションの-a演算子を介して明示的に使用します。最初の式がfalseの場合、2番目の式を評価しないでください。

-deleteしたがって、操作する前に2つのサイズ範囲を指定するだけです。

答え4

それを使用する1つの方法perl

perl -e '
    for ( @ARGV ) { 
        if ( -s >= 386 && -s _ <= 390 ) { 
            unlink $_ or printf qq[%s\n], qq[Could not delete $_: $!] 
        } 
    }
' *

関連情報