Je cherche à vider le répertoire $D de tout ce qu'il contient. Je
considère que le propriétaire de son contenu (pas forcément du
répertoire lui-même) est le même que celui qui lance la commande. Je ne
souhaite utiliser que des commandes POSIX.
Pourquoi pas tout simplement : origine=`pwd` cd $D rm -r *
Que ce passe-t-il si $D n'existe pas ?
Dans ce genre de script, toujours faire
cd "$D" || exit 1
ou quelque chose du genre ...
-- Matthieu
Matthieu Moy
Benoit Izac writes:
% cd un_endroit_de_test % sh -c 'rm -fr -- *' # NE PAS FAIRE ÇA SANS RÉFLÉCHIR ! % ls -A .hide %
En principe, là, il y a quelqu'un pour essayer
rm -fr -- * .*
et en général, il passe quelques secondes plus tard dans la première catégorie d'administrateurs systèmes (il y a ceux qui ont déjà fait une connerie en étant root, et ceux qui vont pas tarder à la faire).
Je précise pour éviter aux lecteurs les moins attentifs de se faire avoir que .* matche . et .. dans la plupart des shells ...
% cd un_endroit_de_test
% sh -c 'rm -fr -- *' # NE PAS FAIRE ÇA SANS RÉFLÉCHIR !
% ls -A
.hide
%
En principe, là, il y a quelqu'un pour essayer
rm -fr -- * .*
et en général, il passe quelques secondes plus tard dans la première
catégorie d'administrateurs systèmes (il y a ceux qui ont déjà fait
une connerie en étant root, et ceux qui vont pas tarder à la faire).
Je précise pour éviter aux lecteurs les moins attentifs de se faire
avoir que .* matche . et .. dans la plupart des shells ...
% cd un_endroit_de_test % sh -c 'rm -fr -- *' # NE PAS FAIRE ÇA SANS RÉFLÉCHIR ! % ls -A .hide %
En principe, là, il y a quelqu'un pour essayer
rm -fr -- * .*
et en général, il passe quelques secondes plus tard dans la première catégorie d'administrateurs systèmes (il y a ceux qui ont déjà fait une connerie en étant root, et ceux qui vont pas tarder à la faire).
Je précise pour éviter aux lecteurs les moins attentifs de se faire avoir que .* matche . et .. dans la plupart des shells ...
La solution correcte doit ressembler à ça :
rm -fr -- * .[^.]* ..?*
-- Matthieu
ALain Montfranc
Yves Lambert a écrit
Benoit Izac wrote:
Je vais garder ma solution à base de find. ;-)
Pourquoi pas tout simplement : origine=`pwd` cd $D rm -r * cd $origine
Ca enlevera pas les rep/fichiers cachés
( cd $D && rm -rf -- * .[^.]* )
lancera un subshell et evite le origine / cd $ origine
Yves Lambert a écrit
Benoit Izac wrote:
Je vais garder ma solution à base de find. ;-)
Pourquoi pas tout simplement :
origine=`pwd`
cd $D
rm -r *
cd $origine
Ca enlevera pas les rep/fichiers cachés
( cd $D && rm -rf -- * .[^.]* )
lancera un subshell et evite le origine / cd $ origine
Pourquoi pas tout simplement : origine=`pwd` cd $D rm -r * cd $origine
Ca enlevera pas les rep/fichiers cachés
( cd $D && rm -rf -- * .[^.]* ..?* )
lancera un subshell et evite le origine / cd $ origine
Benoit Izac
Bonjour,
le 12/03/2007 à 08:00, Matthieu Moy a écrit dans le message :
% cd un_endroit_de_test % sh -c 'rm -fr -- *' # NE PAS FAIRE ÇA SANS RÉFLÉCHIR ! % ls -A .hide %
En principe, là, il y a quelqu'un pour essayer
rm -fr -- * .*
et en général, il passe quelques secondes plus tard dans la première catégorie d'administrateurs systèmes (il y a ceux qui ont déjà fait une connerie en étant root, et ceux qui vont pas tarder à la faire).
Je précise pour éviter aux lecteurs les moins attentifs de se faire avoir que .* matche . et .. dans la plupart des shells ...
Mais un rm POSIX ne doit rien faire avec « . » ou « .. » :
| If either of the files dot or dot-dot are specified as the basename | portion of an operand (that is, the final pathname component), rm | shall write a diagnostic message to standard error and do nothing more | with such operands.
-- Benoit Izac
Bonjour,
le 12/03/2007 à 08:00, Matthieu Moy a écrit dans le message
<vpq7itnx7x8.fsf@olympe.imag.fr> :
% cd un_endroit_de_test
% sh -c 'rm -fr -- *' # NE PAS FAIRE ÇA SANS RÉFLÉCHIR !
% ls -A
.hide
%
En principe, là, il y a quelqu'un pour essayer
rm -fr -- * .*
et en général, il passe quelques secondes plus tard dans la première
catégorie d'administrateurs systèmes (il y a ceux qui ont déjà fait
une connerie en étant root, et ceux qui vont pas tarder à la faire).
Je précise pour éviter aux lecteurs les moins attentifs de se faire
avoir que .* matche . et .. dans la plupart des shells ...
Mais un rm POSIX ne doit rien faire avec « . » ou « .. » :
| If either of the files dot or dot-dot are specified as the basename
| portion of an operand (that is, the final pathname component), rm
| shall write a diagnostic message to standard error and do nothing more
| with such operands.
le 12/03/2007 à 08:00, Matthieu Moy a écrit dans le message :
% cd un_endroit_de_test % sh -c 'rm -fr -- *' # NE PAS FAIRE ÇA SANS RÉFLÉCHIR ! % ls -A .hide %
En principe, là, il y a quelqu'un pour essayer
rm -fr -- * .*
et en général, il passe quelques secondes plus tard dans la première catégorie d'administrateurs systèmes (il y a ceux qui ont déjà fait une connerie en étant root, et ceux qui vont pas tarder à la faire).
Je précise pour éviter aux lecteurs les moins attentifs de se faire avoir que .* matche . et .. dans la plupart des shells ...
Mais un rm POSIX ne doit rien faire avec « . » ou « .. » :
| If either of the files dot or dot-dot are specified as the basename | portion of an operand (that is, the final pathname component), rm | shall write a diagnostic message to standard error and do nothing more | with such operands.
-- Benoit Izac
Stephane Chazelas
2007-03-12, 08:01(+01), ALain Montfranc:
Yves Lambert a écrit
Benoit Izac wrote:
Je vais garder ma solution à base de find. ;-)
Pourquoi pas tout simplement : origine=`pwd` cd $D rm -r * cd $origine