[caption id="attachment_80" align="aligncenter" width="232"] Linu[/caption]
Introdução
Neste post iremos utilizar o ShellScript para implementar um recurso muito importante que possibilita a recuperação simples e rápida de uma lixeira para o linux quando utilizado sem os gerenciadores de janelas como KDE, Gnome e outros que ja possuem um recurso parecido.
O Problema
Quando se utiliza o terminal o linux, pode acontecer alguns desastres, como por exemplo o uso do comando rm que remove o arquivo informado permanentemente. Por isso criei o script abaixo que move o arquivo ou pasta informado para uma pasta temporária, e só remove permanentemente após 30 dias.
A Solução
Para disponibilizar o comando em qualquer local do terminal, crie o arquivo com o nome "del.sh", dê permissão de execução com o comando "chmod +x del.sh" e crie um link dentro da pasta "/usr/local/bin" com o seguinte comando: "ln -s /home/pasta/onde/esta/o/arquivo/del.sh del"
Apos seguir todos estes passos, você ja poderá utilizar o comando:
del arquivo.txt
O ShellScript del.sh
declare -r trash="$HOME/.trash" declare -r -i maxsize=500 if [ ! -d "$HOME/.trash" ]; then mkdir "$HOME/.trash" fi clear(){ files="`find -mtime +30`" for f in files do echo "$f" done } function newname { local sequencename="$trash/.sequence" if [ ! -f $sequencename ]; then echo "0" > $sequencename fi local value=$(cat "${sequencename}") ((value++)) echo "$value" > $sequencename echo $value } function movedir { if [ ! -d $2 ]; then mkdir $2 fi for var in "$1/*" do if [ -f "$var" ]; then mv "$1/$var" $2 else movedir $1 $var fi done } function deletedir { local sequence="`newname`" local newlocalname="$trash/${sequence}" echo "${sequence}|$1"i >> "$trash/.catalog" mkdir $newlocalname rm "$1" } function deletefile { local filename="$1" local sequence="`newname`" local newlocalname="$trash/${sequence}" echo "${sequence}|$1" >> "$trash/.catalog" mv "$1" "${newlocalname}" log "O usuario [$USER] removeu o arquivo [$1]" } function delete { if [ -d "$1" ]; then mv "$1" $trash else if [ -f "$1" ]; then deletefile "$1" else echo "File or directory not exists: [$1]" exit 1 fi fi } if [ "$1" == "-ls" ]; then ls -ag $trash exit 0 else if [ "$1" == "-c" ]; then clear exit 0 else if [ "$1" == "-s" ]; then echo -e "Current size of trash folder: `du -m $trash | tail -1`" exit 0 else if [ "$1" == "-h" ]; then echo -e "Usage [del [files] or [options]]" echo -e "-ls -> List files in trash folder \n-c -> Remove files deletes after 30 days\n-s -> Show current size of trash folder" exit 0 fi fi fi fi ( for item in $@ do filename="$item" isabsolute=$(echo "$filename" | sed "s/\/.*/1/g") if [ "$isabsolute" != "1" ]; then filename="`pwd`/$filename" fi delete "$filename" done ) size="`du -m $trash | tail -1`" size="`echo $size | sed 's/\([0-9]\).*//g'`" echo "Current size of Trash folder: $size Mb" exit 1
Exemplo de uso:
>del arquivo.txt >del *.txt >del a.csv b.csv d.jpg