Lorsque vous utilisez sudo rm -r
comment puis-je supprimer tous les fichiers, à l'exception de ceux qui suivent :
textfile.txt
backup.tar.gz
script.php
database.sql
info.txt
Lorsque vous utilisez sudo rm -r
comment puis-je supprimer tous les fichiers, à l'exception de ceux qui suivent :
textfile.txt
backup.tar.gz
script.php
database.sql
info.txt
find [path] -type f -not -name 'textfile.txt' -not -name 'backup.tar.gz' -delete
Si vous ne spécifiez pas -type f
find listera également les répertoires, ce que vous ne voulez peut-être pas.
Ou une solution plus générale utilisant la très utile combinaison find | xargs
:
find [path] -type f -not -name 'EXPR' -print0 | xargs -0 rm --
par exemple, supprimer tous les fichiers non txt dans le répertoire courant :
find . -type f -not -name '*txt' -print0 | xargs -0 rm --
Le site print0
y -0
est nécessaire s'il y a des espaces dans l'un des noms de fichiers à supprimer.
find . | grep -v "excluded files criteria" | xargs rm
Ceci va lister tous les fichiers dans le répertoire courant, puis tous ceux qui ne correspondent pas à vos critères (attention à la correspondance des noms de répertoire) et ensuite les supprimer.
Mise à jour : basé sur votre édition, si vous voulez vraiment supprimer tout ce qui se trouve dans le répertoire courant sauf les fichiers que vous avez listés, ceci peut être utilisé :
mkdir /tmp_backup && mv textfile.txt backup.tar.gz script.php database.sql info.txt /tmp_backup/ && rm -r && mv /tmp_backup/* . && rmdir /tmp_backup
Il créera un répertoire de sauvegarde /tmp_backup
(vous avez les privilèges de Root, n'est-ce pas ?), déplacez les fichiers que vous avez listés dans ce répertoire, supprimez récursivement tout ce qui se trouve dans le répertoire actuel (vous savez que vous êtes dans le bon répertoire, n'est-ce pas ? /tmp_backup
et enfin, supprimer /tmp_backup
.
Je choisis que le répertoire de sauvegarde soit dans Root, car si vous essayez de tout supprimer récursivement depuis Root, votre système aura de gros problèmes.
Il existe certainement des façons plus élégantes de procéder, mais celle-ci est assez simple.
Vous pouvez utiliser la variable d'environnement GLOBIGNORE dans Bash.
Supposons que vous souhaitiez supprimer tous les fichiers, à l'exception de php et sql, vous pouvez procéder comme suit -
export GLOBIGNORE=*.php:*.sql
rm *
export GLOBIGNORE=
En définissant GLOBIGNORE de cette manière, on ignore les caractères de remplacement utilisés par php et sql comme "ls *" ou "rm *". Ainsi, l'utilisation de "rm *" après avoir défini la variable ne supprimera que les fichiers txt et tar.gz.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.