ログイン

linuxゴミ箱

Top / linux_trash

Japanese / English

  • trash.shに致命的なバグが発見されました。trash.shを使用している方は直ちに更新をお願いします。(2005.08.05)

使いかた

間違えて大切なファイルをrmしないための簡単なツール。コマンドmmによってファイルまたはフォルダをゴミ箱へ移動し、一定時間が経過すると自動的に消えます。 (以下の作業は、自己責任でお願いします!。)

mmの設定は、

  • mmをパスが通っているディレクトリに置く。
  • mmをエディタで開き、ゴミ箱の位置を設定する(変数TRASH_BOX)。

ゴミ箱のファイルを自動的に消す機能を使用する場合は、さらに

  • trash.shを適当な場所に置く。
  • trash.shをエディタで開き、ゴミ箱の位置(mmと同じ)と消去までの日数を設定する。
  • trash.shをcronに登録する。

例えばtest.datというファイルをゴミ箱に移動する場合、

[mydir@hosts] mm test.dat

によって、test.datがゴミ箱へ移動します。ディレクトリの移動も可能です。ゴミ箱に同名のファイル・フォルダがある場合は、末尾に番号が付加されます。

ゴミ箱にたまったファイルはcronを設定している場合、指定した日数が経過すると自動的に削除されます。

謝辞

上のスクリプトを公開するにあたり、がわさんに不具合の指摘と助言、動作の確認をしていただきました。どうもありがとうございます。

更新履歴(trash.sh)

  • Ver 0.01r2 (2005.08.05)
    • 変数TRASH_TARGETで指定したディレクトリが存在しない場合、他のファイルを消してしまうバグを修正

メモ

  • フォルダ中のファイルを指定してゴミ箱に移動することができない(2005.3.7)

ソースコード

mm

#!/bin/sh
#######################################################
#                                                     #
#                  mm   Ver0.02 r4                    #
#                                                     #
#                          by C.Kodama 2004.10.31     #
#######################################################

### ゴミ箱の位置 ###
TRASH_BOX="/home/hogehoge/trash"


while [ $# -gt 0 ]
do
    # ゴミのファイル名生成
    NAME=`echo $1 | sed -e "s|/$||" | sed -e "s|.*/||"`
    TRASH_HEAD=${TRASH_BOX}/${NAME}
    TRASH_NAME=${TRASH_HEAD}
    i=1
    while true
    do
	if [ -f ${TRASH_NAME} -o -d ${TRASH_NAME} ]
	then
	    TRASH_NAME=${TRASH_HEAD}.${i}
	    i=`expr ${i} + 1`
	else
	    break
	fi    
    done

    #echo ${TRASH_NAME}
    
    mv -i $1 ${TRASH_NAME}
    shift
done


echo "ごみ箱へ捨てました。"


### メモ ###

trash.sh

#!/bin/sh

### ゴミ箱の位置 ###
TRASH_TARGET=/home/kodama/trash/

### 自動削除までの日数 ###
TRASH_DAY=7



# 移動
if ! cd ${TRASH_TARGET}
then
    exit
fi


# ログを残す
echo "dir="
find ./ -type d -daystart -ctime +${TRASH_DAY} | grep "^\./[^/]*$"

echo "file="
find ./ -type f -daystart -ctime +${TRASH_DAY} | grep "^\./[^/]*$"


# 消去
find ./ -type d -daystart -ctime +${TRASH_DAY} | grep "^\./[^/]*$" | xargs rm -rf

find ./ -type f -daystart -ctime +${TRASH_DAY} | grep "^\./[^/]*$" | xargs rm -rf