特定のサイズ以下のファイルを削除したいです。たとえば、次のファイルのリストがあります。
-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
複数の基本色をリンクして接続を取得できます(一部のバージョンでは、色の間に-a
ORを入れることができます-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 $_: $!]
}
}
' *