ファイルの削除でファイルを本当には削除しないようにする
githubに置いてあります。
※「spitiko」でインストール出来ます。
Linuxなどで「rm」コマンドでファイルやディレクトリを削除すると、取り返しがつきません。
なので、下記のようなbashスクリプトを「/usr/local/bin/trash」みたいなファイルで設置して、
alias rmf="trash"
みたいにして、rmfコマンドを使うと、ホームディレクトリの「.Trash」に移動されるだけで、実際にはファイルは削除されないという形にしてみた。
スクリプトの最後を見ると分かりますが、このスクリプトを使うたびに「.Trash」に移動されてから30日経過したファイルは自動的に削除されます(これはほんとに消えます)。
オプションとして「--clean」を付けて実行すると、強制的に「.Trash」ディレクトリ内を空にします。
あと、Macの場合はOS標準のゴミ箱も「.Trash」なので、ファインダーで捨てたファイル/フォルダーも30日経過すると消えます。
今のバージョンでは、シンボリックリンクは移動出来ないのでそのまま削除されます。
シンボリックリンクは削除されても問題ないと思われるので大丈夫でしょう。
実行例
$ trash --clean
「trash」スクリプト
#!/bin/bash
# home directory
HOME=`echo ~`
# trash directory
TRASH="${HOME}/.Trash"
# option string
TARGET="$@"
# first arg
ARGS=(`echo "$@"`)
# option value
CLEAN=0
if [ -z "${ARGS[0]}" ]; then
echo -e $'\e[35mUsage: trash [option] [delete file name]'
echo -e $'\e[35moption:'
echo -e $'\e[35m --clean delete all files in .Trash directory.'
exit
fi
for arg in ${TARGET}; do
if [ "${arg}" = "--clean" ]; then
CLEAN=1
fi
done
if [ ! -d ${TRASH} ]; then
mkdir ${TRASH}
fi
for file in ${TARGET} ; do
if [[ ! ${file} =~ ^-.*$ ]]; then
if [ -e ${file} ]; then
org=${file}
if [[ ${file} =~ ^(.*)\/$ ]]; then
file=${BASH_REMATCH[1]}
fi
if [[ ${file} =~ ^.*\/(.*) ]]; then
file=${BASH_REMATCH[1]}
fi
fname=${file}
loop=1
while [ -e "${TRASH}/${fname}" ]; do
fname="${file}.${loop}"
loop=$((loop+1))
done
if [ -L ${org} ]; then
echo -e $'\e[35mThis file is a symbolic link , it will be removed: '${org}
rm -rf ${org}
else
echo -e $'\e[35m'${file}' is move to Trash.: '${fname}
mv -f ${org} "${TRASH}/${fname}"
fi
else
echo -e $'\e[35mfile not found: '${file}
fi
fi
done
if [ ${CLEAN} -eq 1 ]; then
find ${TRASH} -maxdepth 1 -regex "${TRASH}/.+" -exec rm -rf {} \;
echo -e $'\e[35mclean \".Trash\".'
else
find ${TRASH} -maxdepth 1 -regex "${TRASH}/.*" -mtime +30 -exec rm -rf {} \;
fi