On Tue, May 24, 2016 at 12:08:20PM +0200, Hugues MORIN wrote: > J'ai besoin de supprimer tout le contenu d'un repertoire SAUF le fichier > index.php > > Il me semblai que cela aurai du le faire: > find /var/www/monsite/cache ! -name 'index.php' -exec rm -rf {} \; > > mais en pratique cela supprime aussi le repertoire "cache" > > La syntaxe me semble correcte mais comment faire pour ecarter le dossier > "cache" de la suppression?
find /var/www/monsite/cache ! -name 'index.php' -delete ou find /var/www/monsite/cache -depth ! -name 'index.php' \( \( -type f -exec rm '{}' \; \) -o \( -type d -exec rmdir '{}' \; \) \) Cela évite le "rm -rf" qui supprime tout. La suppression des dossiers dans lesquels il restera des fichiers échouera. Par exemple : $ find ./var/www/monsite/cache ./var/www/monsite/cache ./var/www/monsite/cache/rep2 ./var/www/monsite/cache/rep2/otherfile2b ./var/www/monsite/cache/rep2/otherfile2a ./var/www/monsite/cache/rep1 ./var/www/monsite/cache/rep1/index.php ./var/www/monsite/cache/rep1/otherfile1a $ find ./var/www/monsite/cache '!' -name 'index.php' -delete find: impossible de supprimer « ./var/www/monsite/cache/rep1 »: Le dossier n'est pas vide find: impossible de supprimer « ./var/www/monsite/cache »: Le dossier n'est pas vide $ find ./var/www/monsite/cache ./var/www/monsite/cache ./var/www/monsite/cache/rep1 ./var/www/monsite/cache/rep1/index.php