Mythus vamos lá. Antes de mais nada preciso perguntar. O que você quer exatamente com isto aqui?
Mas ainda acho que a remoção de arquivos em diretórios montados deveria ir para `pwd |cut -d / -f 1,2,3`/.Trash-$USER/
Pergunto isto pelo seguinte. Eu executei o comando no meu terminal, e só apareceu a informação que já esta em $HOME. Mas estou imaginando que você quer criar (se já não existir) um diretório .Trash-$USER dentro da partição onde esta o arquivo, e ai move-lo para lá? Só que o seguinte, o comando que passou necessariamente não passa informações de partição, pois se eu estiver na minha HOME, e me referir a um arquivo pelo seu PATH não vai dar certo. Outra coisa, e se não tiver direitos de escrita nesta partição? Lógico que ai nem poderia remover, mas como ficaram muitas duvidas estou aguardando maiores informações para implementar.
O que eu implementei agora:
- Código (inclusive a parte) que descobre (de forma eficiente ao menos nos meus testes) se o arquivo desejado esta dentro de uma partição diferente da raiz (/), e ai pergunta se o usuário realmente deseja mover o arquivo para a lixeira. Testei passando como parâmetro (todos eram caminhos válidos aqui) os dados abaixo e tive uma resposta correta em todos:
- /media/hda2/arquivo
- /media/hda2/Musicas/Supertramp/arquivo.mp3
- ../../../../media/hda2/Musicas/Supertramp/arquivo.mp3
- ../Scripts/eh_particao.sh
Sei que existem muitas outras formas de se chegar a um arquivo, mas acho que peguei o básico assim.
- Mudança para testar também .Trash-$USER
- Implementado as variáveis para controle de decisão a tomar para diretórios e arquivos em outras partições.
Ai vão os arquivos, fique atento à variável
PATH_Script que deverá ser alterada para o perfeito funcionamento ai.
remove_seguro.sh#!/bin/bash
#
# Remoção segura de arquivos.
# Na verdade não remove, apenas move para a pasta .trash do usuário
#
# Criado por: Cristiano
# Data: 21/08/2007
#
# Alterações:
# Tirado Limitação para Diretórios Dica: Mythus Implementado por: Cristiano - 22/08/2007
# Verificar se arquivo começa com "-" ou é opção Dica: Mythus Implementado por: Cristiano - 22/08/2007
# Encerrando p/ arquivos de outras partições Dica: Mythus Implementado por: Cristiano - 22/08/2007
# Solicitando confirmação para rm da Trash Dica: Mythus Implementado por: Cristiano - 22/08/2007
# Controle de diretórios e arq. em partição Dica: Mythus Implementado por: Cristiano - 22/08/2007
# Controle de lixeiras .Trash-$USER Dica: Mythus Implementado por: Cristiano - 22/08/2007
#
###########################################################
#Esta variável deve ser alterada para a situação de cada
#usuário que for rodar o script
###########################################################
PATH_Script="/home/clcampos/Scripts"
###########################################################
arquivos=$* # Nomes de Arquivos passados por parametro
arq_a_rm=""
#####################################################
# Definição da forma de trabalho da rotina quanto a
# Arquivos em outras Partições
# Diretórios
#
eh_dir="0" # 0: Remove sem perguntar 1: Não remove 2: Pergunta primeiro
eh_par="0" # 0: Remove sem perguntar 1: Não remove 2: Pergunta primeiro
#######################################################################################
# Consiste a possibilidade de remoção do arquivo
#
for arquivo in $arquivos;do
opcao=`echo $arquivo | cut -c1-1`
# Se for alguma opção (começado com "-") executa diretamente o comando rm
if test "$opcao" = "-"; then
test -w $arquivo && continue # se existir o tal arquivo começado com "-" então esta tudo ok, senão deve ser parametro
test -d $arquivo && continue # diretório também pode começar com "-"
echo -e "\033[1mrm:\033[0m Rotina executada com opções. Comando \033[1mrm\033[0m será executado."
/bin/rm $arquivos
exit $? #termina a rotina com o mesmo status de término do comando rm, para consistências caso necessário
fi
# Arquivos que estiverem na lixeira serão removidos
diretorio=`dirname $arquivo`
diretorio=`basename $diretorio`
if test "$diretorio" = ".Trash" -o "$diretorio" = ".Trash-$USER"; then
opSN=""
echo -e "\n\nConfima remoção \033[1mdefinitiva\033[0m do item \033[1m$arquivo\033[0m que se encontra na lixeira (s/N)? \c"
read opSN
[[ $opSN = [Ss] ]] && rm $arquivo && continue
else
# Armazena os nomes dos arquivos que serão removidos no próximo for
# Esta sendo usada para que os arquivos que forem da removidos lixeira não estejam
# na lista visto que Ou são removidos aqui Ou o usuário desistiu da sua remoção,
# clicando qualquer coisa diferente de S ou s na pergunta acima
#
arq_a_rm="$arq_a_rm $arquivo"
fi
# Verifica Partição
sh $PATH_Script\/eh_particao.sh $arquivo
if test $? -eq 0; then
if test "$eh_par" = "2";then # Pede confirmação para mover o arquivo para lixeira
opSN=""
echo -e "\n\nO alvo (\033[1m$arquivo\033[0m) encontra-se em uma outra partição. Deseja mesmo movê-lo para lixeira (s/N)? \c"
read opSN
[[ $opSN = [Ss] ]] || echo -e "\033[1mrm:\033[0m Nada foi feito."
[[ $opSN = [Ss] ]] || exit 9999
elif test "$eh_par" = "1";then #Não libera a "remoção"
echo -e "\033[1mrm:\033[0m Impossível remover \"\033[1m$arquivo\033[0m\": Em outra partição."
exit 9999
fi
fi
# Verifica se o arquivo/diretório não existe
if test ! -f $arquivo -a ! -d $arquivo; then
echo -e "\033[1mrm:\033[0m Impossível remover \"\033[1m$arquivo\033[0m\": Arquivo não existe."
exit 9999
fi
# Pede autorização para "remover" o diretório
if test -d $arquivo; then
if test "$eh_dir" = "2"; then # Pede confirmação para mover o diretório para lixeira
opSN=""
echo -e "\n\nConfima remoção do diretório \033[1m$arquivo\033[0m (s/N)? \c"
read opSN
[[ $opSN = [Ss] ]] && continue
echo -e "\033[1mrm:\033[0m Nada foi feito."
exit 9999
elif test "$eh_dir" = "1"; then #Não libera a "remoção"
echo -e "\033[1mrm:\033[0m Impossível remover, é um \033[1mDiretório\033[0m."
exit 9999
fi
fi
# Verifica se é arquivo e tem permissão de remoção
test -w $arquivo && continue
echo -e "\033[1mrm:\033[0m Impossível remover \"\033[1m$arquivo\033[0m\": Verifique."
exit 9999
done
arquivos=$arq_a_rm
for arquivo in $arquivos;do
mv $arquivo $HOME/.Trash
done
eh_particao.sh#!/bin/bash
#
# Consite se PATH é uma partição
#
# Sugestão de função: MYTHUS
# Implementada por: Cristiano
# Data: 22/08/2007
#
#
# Rotina só aceita um parametro, que deve ser obrigatóriamente um PATH/arquivo
# Caso tenha sido apenas passado o nome de um arquivo do diretório atual (sem o percurso), este é adicionado para verificação,
# pelo path, se esta dentro de uma partição ao não
#
test `basename $1` = "$1" && parametro="`pwd`/$1" || parametro=$1
# Caso o PATH passado não seja um direto (exemplo.: ../../outra_pasta/arquivo) o PATH é corrigido
#
if test "`echo $parametro | cut -c1-1`" = "."; then
dir_arquivo=`dirname $parametro`
dir_atual=`pwd`
cd $dir_arquivo
parametro="`pwd`/`basename $1`"
cd $dir_atual
fi
while true; do
tem_corresp=`df | grep $parametro`
if test "$tem_corresp" = ""; then
# Neste caso não achou uma partição correspondente ao PATH passado.
parametro=`dirname $parametro`
test "$parametro" = "/" && exit 3 # neste caso não era uma partição
continue
else
exit 0 #aqui é uma partição
fi
done