Page 1 sur 1

[bash] find + exec

Publié : ven. 24 nov. 2023, 07:40
par AchilleFraisse
bonjour,
j'ai voulu supprimer tous me dossiers vide dans un répertoire :

Code : Tout sélectionner

find . -type d -empty -exec rm -rf {} \;
mais sans faire expres j'ai oublié le -empty ...
je m'en suis rendu compte peu de temps apres, mais j'ai 1200 répertoires sur 13000 qui se sont effacés.
j'aurai voulu savoir les répertoires que j'ai perdu.
en faisant un find classique, je constate qu'il liste les répertoires par ordre alphabétique. est-ce qu'il en est de même pour la suppression (exec rm ...) ?

Re: [bash] find + exec

Publié : ven. 24 nov. 2023, 14:59
par papajoke
bonjour
AchilleFraisse a écrit : ven. 24 nov. 2023, 07:40 je constate qu'il liste les répertoires par ordre alphabétique. est-ce qu'il en est de même pour la suppression (exec rm ...) ?
les commandes rm sont exécutés une à une dans l'ordre ou arrivent les sorties de find

par défaut cela ne devrait pas être l'ordre alphabétique find . -type d | more

note: si le dossier est vide, pourquoi avoir ajouté -rf ? rmdir est suffisant

Re: [bash] find + exec

Publié : ven. 24 nov. 2023, 15:11
par avi3000
Bonjour,
AchilleFraisse a écrit : je constate qu'il liste les répertoires par ordre alphabétique.
Non. Si c'est le cas, c'est un pur hasard.

Code : Tout sélectionner

find . -type d
.
./find
./find/testsuite
./find/testsuite/find.gnu
./find/testsuite/config
./find/testsuite/find.posix
./doc
./tests
./tests/find
./tests/xargs
./tests/misc
./build-aux
./locate
./locate/testsuite
./locate/testsuite/locate.gnu
./locate/testsuite/config
./xargs
./xargs/testsuite
./xargs/testsuite/xargs.sysv
./xargs/testsuite/inputs
./xargs/testsuite/xargs.posix
./xargs/testsuite/xargs.gnu
./xargs/testsuite/config
./m4
./po
./gl
./gl/m4
./gl/lib
./gl/lib/glthread
./gl/lib/unictype
./gl/lib/malloc
./gl/lib/uniwidth
./lib
./gnulib-tests
./gnulib-tests/glthread
./gnulib-tests/uniwidth
find utilise FTS pour parcourir une arborescence et ne lui fournit pas de routine de comparaison.

Avec ou sans -exec, l'odre d'affichage est le même.

find . -type d -exec echo {} \; et find . -type d affichent l'arborescence dans le même ordre.