2017-07-19 6 views
0
であるxMBより小さいファイルを削除するシェルスクリプト

フォルダ内に10MBを超えるファイルが複数ある場合は、最も小さいファイルを削除するスクリプトを作成しようとしていますが、成功しませんでした。私の試み条件が

find . -type f -size -10M -exec rm {} +

はすべて10MB未満を外し、私はフォルダ内に再帰的に10メガバイトよりも小さい2つのファイルを持っている場合のみ、最小を削除する必要があります。

いずれもお手伝いできますか?

答えて

0

オプションはfindの出力をループしているし、ファイルの後、数を追跡し、最後にあなたがそれを削除することができますので、最小のファイルを追跡:

#!/bin/bash 

path=/path/to/dir # replace here with your path 

while read -d '' -r dir;do 

    files_count=0 
    unset min 
    unset smallest_file 

    while read -d '' -r file;do 

      let files_count++ 
      min_size="$(du -b "${file}"|cut -f1)" 
      min=${min:-"$min_size"} 
      smallest_file=${smallest_file:-"$file"} 

      if ((min_size < min));then 
        min=$min_size 
        smallest_file=$file 
      fi 

    done < <(find "${dir}" -type f -size -10M -maxdepth 1 -print0) 

    if ((files_count >= 2));then 

      echo "$smallest_file" 
      #rm -v "$smallest_file" 

    fi 

done < <(find "${path}" -type d -print0) 
+0

だから、ドン」ここで働く: 'find: 'smallest':そのようなファイルやディレクトリはありません。' ' 私が理解していることから、それらの中で最も小さいものがすべて削除されます。しかし、このフォルダの中にサイズが10MB未満のファイルが2つ以上ある場合、フォルダの中で最小のものだけを削除する必要があります。 –

+0

@ YagoLima申し訳ありません、それは私のテストディレクトリでした、あなたのディレクトリパスに置き換えて、私はコードを編集しました。 – archemiro

+0

私の悪い、すでにここで変更されています。しかし、私が言ったように、それはそれらの中で最も小さいものだけを示しています。フォルダ内に最小ファイルが必要なのは、そのフォルダ内に> = 2個のファイルが10MBより小さい場合です。 –