Linux では,
rm
で削除したファイルを復元する機能が提供されていません.
そこで,
rm
をゴミ箱に移動するコマンドに置き換える方法を紹介します.
ここで紹介する機能は,
- ゴミ箱ディレクトリを作る
- 削除するファイルがゴミ箱ディレクトリと同じファイルシステム上にあればゴミ箱に移動する.
- 削除するファイルのあるファイルシステム上にゴミ箱ディレクトリがなければ, プロンプトを出して削除する.
を備えています.
ファイルを削除する代わりに, 同じファイルシステムにあるゴミ箱ディレクトリに移動させます.
その副作用として, 削除が高速になります.
ファイルの移動は, ファイルの実体への参照を書き換えるだけで行える実装になっているファイルシステムがほとんどだからです.
function rms
{
# safe rm
local rm_opt='-v -i'
local mv_opt=''
OPTIND=0
while getopts firv flag; do
case $flag in
f) mv_opt="$mv_opt -f";;
i) mv_opt="$mv_opt -i";;
r) rm_opt="$rm_opt -r";;
v) mv_opt="$mv_opt -v";;
*) OPT_ERROR=1; break;;
esac
done
if [[ $OPT_ERROR ]]; then
echo "usage: $0 -firv files..." >&2
exit $OPT_ERROR
fi
shift $((OPTIND-1))
local trashes=(
~/.trash
/tmp/trash-$USER
)
mkdir "$trashes" &>/dev/null
local i t
local date=$(date +'%Y%m%d-%H%M%S')
for i in "$@"; do
local found=''
for t in ${trashes[@]}; do
if test "$(stat -c '%D' "$i")" = "$(stat -c '%D' "$t")"; then
local tt=$t/$date/
mkdir $tt &>/dev/null
mv $mv_opt "$i" $tt && local found=1
fi
test -n "$found" && break
done
test -z "$found" && /bin/rm $rm_opt "$i"
done
}
alias rm=rms
0 件のコメント:
コメントを投稿