Edgard Leal

My personal blog hosted on Github using Jekyll

Home View on GitHub
23 December 2013

[caption id="attachment_80" align="aligncenter" width="232"]Utilizando ShellScript para não perder mais arquivos no Linux 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


blog comments powered by Disqus