Salut,
J'ai ce script qui fonctionne très bien bar un couple de problèmes, j'essaie de suivre la commande rm et cela je ne peux pas utiliser le répertoire rm, je imé à l'alias de rm de mon script, puis utiliser mv pour déplacer des fichiers à un corbeille dossier plutôt que de le supprimer définitivement.
Le problème: lorsque j'utilise mv pour déplacer un répertoire dans mon dossier supprimé lorsque ce répertoire existe tout prêt, j'obtiens une erreur, j'ai l'intention de broyer tous les fichiers et ensuite je veux utiliser rmdir pour supprimer tous les répertoires vides dans l'arbre.
Mon script est ici
Code:
#!/bin/bash
# Ai program to emulate the "rm" command in UNIX.
# Created by Michael Kelly
# Last revison 12/07/2006
# INITIALIZE VARIABLES
NO_ARGS=0
FLAG_R=""
FLAG_F_I=""
FLAG_V=""
TRASH=$HOME/deleted
# FUNCTIONS
function errors() {
if [ "$#" -eq "$NO_ARGS" ] ; then
echo "rm: too few arguments"
echo "Try \`rm --help' for more information."
exit 0
elif [[ ! -f "$1" && ! -d "$1" ]] ; then
echo "rm: cannot remove $ARG : no such file or directory"
exit 0
elif [[ -d $ARG && "$FLAG_R" = "" ]] ; then
echo "rm: \`$ARG' is a directory"
exit 0
else
checkExisting $1
fi
}
function verbose () {
if [ "$FLAG_V" = "v" ] ; then
echo "removing \`$1'"
fi
}
function interactive () {
echo -n "rm: remove $1 ?"
read A
if [[ "$A" = [Yy] ]] ; then
remove $1
else
exit 0
fi
}
function writePro () {
if ! [ -w "$1" ] ; then
echo -n "rm: remove write-protected file \`$*'?"
read A
if [[ "$A" = [Yy] ]] ; then
delete $1
fi
else
delete $1
fi
}
function checkExisting ()
{
if [ -d "$TRASH/$1" ] || [ -f "$TRASH/$1" ]; then
shred -fp $TRASH/$1 2>/dev/null
rmdir $TRASH/$1 2>dev/null
writePro $1
else
writePro $1
fi
}
function force () {
mv -f $1 $TRASH 2>/dev/null
verbose $1
}
function remove () {
mv $1 $TRASH 2>/dev/null
verbose $1
}
function delete() {
if [ "$FLAG_F_I" = "-i" ] && [ -w "$@" ] ; then
interactive $1
elif [ "$FLAG_F_I" = "-f" ] ; then
force $1
elif [ "$FLAG_R" = "-R" ] ; then
recursive $1
else
remove $1
fi
}
# Getops
while getopts :rRfvi o
do case $o in
r|R) FLAG_R=-R
;;
f) FLAG_F_I=-f
;;
v) FLAG_V=-v
;;
i) FLAG_F_I=-i
;;
*) echo "rm: invalid option -$1"
echo "try \`rm --help' for more information"
exit 0
esac
done
shift `expr $OPTIND - 1`
if ! [ -d "$HOME/deleted" ] ; then
mkdir $HOME/delete
else
for ARG in $*
do
errors $ARG
done
fi
if [ $# -eq $NO_ARGS ] ; then
errors
fi
J'ai souligné le problème de la fonction en gras, je tiens à broyer les fichiers recrusively rmdir et ensuite utiliser la même façon pour les répertoires vides.
Quelqu'un a recommandé cette commande:
Code:
find -type f -exec shred -u '{}' \;
qui broie recursivley mais comment puis-je préciser que le point de départ de shreding? lorsque j'ai utilisé avant elle a effacé tous les fichiers dans mon répertoire d'accueil à partir.
Une fois que j'ai triés je veux utiliser une autre commande mais en remplaçant rmdir avec déchiqueter, quelqu'un peut me conseiller hors d'elle?
Observe
Jack