2016-07-19 11 views
1

私はインターンであり、60日以上経過したディレクトリ内のファイルを削除するBASHスクリプトを作成し、削除されたファイルの数と削除されたデータの量を含むテキストファイルをエクスポートするタスクを与えられました。私はまだBASHを学び、30日以上経過したファイルを削除するライナーを1つ持っています。BASHスクリプトを使用して古いファイルを削除し、削除されたファイルの総数とサイズを含むテキストファイルを作成します。

`find $DIR -type f -mtime -60 -exec rm -rf {}\;` 

私はまだ積極的にBASHを学習しようとしています。

P.S.私はBash Academyを見つけましたが、サイトが不完全であるように見えます。さらにbashを学ぶための私の探求のための推奨事項も高く評価されます!

答えて

1

私は以下のスクリプトを使用し、目的のためにdeleter.sh言う:

#!/bin/bash 
myfunc() 
{ 
    local totalsize=0 
    echo " Removing files listed below " 
    echo "${@}" 
    sizes=($(stat --format=%s "${@}")) #storing sizes in an array. 
    for i in "${sizes[@]}" 
    do 
    ((totalsize += i)) #calculating total size. 
    done 
    echo "Total space to be freed : $totalsize bytes" 
    rm "${@}" 
    if [ $? -eq 0 ] #$? is the return value 
    then 
    echo "All files deleted" 
    else 
    echo "Some files couldn't be deleted" 
    fi 
} 
export -f myfunc 
find "$1" -type f -not -name "*deleter.sh" -mtime +60\ 
-exec bash -c 'myfunc "[email protected]"' _ {} + 
# -not -name "*deleter.sh" to prevent self deletion 
# Note -mtime +60 for files older than 60 days. 

chmod +x ./deleter.sh 

を行うと、

./deleter '/path/to/your/directory' 

参考としてそれを実行

  1. 詳細は[ manpage ]を検索してください。
  2. stat --format=%sは、配列に格納されるバイト単位のサイズを示します。 [ stat ]マンページを参照してください。

フィードバックは、findと `{} +`言及する価値

+0

ニース:)は、コマンドライン –

+1

が、これは素晴らしいです、@sjsam私が働いていたものよりもはるかクリーナーをありがとう構築し感謝あなたが興味を持っているかもしれない場合に備えて、私が思いついたことがあります。 #!/ bin/bash date = $(date +%F) #findコマンドの出力でテキストファイルを作成します。 find -type f -mtime -60> /tmp/$date.text cp /tmp/$date.text/root #Reads $ dateファイルに含まれているファイルを削除します。 xargs -a /tmp/$date.text -d '\ n' rm – BasicsAG

+0

You'rsははるかにクリーンで、私の行うファイルは作成しません。私は学ぶべきことがたくさんある!また、@mona_saxはあなたの情報に感謝します! – BasicsAG

関連する問題