2 votes

Suppression de tous les fichiers sauf 1 et 1 répertoire sous linux

Je veux supprimer tout sauf un fichier et un répertoire du répertoire dans lequel je me trouve actuellement. Comment dois-je m'y prendre ?

J'ai un répertoire qui contient trois répertoires a, b, c et trois fichiers 1.php, 2.php, 3.php. Je veux supprimer les répertoires a et b, ainsi que les fichiers 1.php et 2.php uniquement. Je cherche une solution pour faire cela de manière plus facile. Je cherche une solution qui pourrait être utilisée à plus grande échelle avec plus de dossiers et de fichiers.

3voto

Daniel Andersson Points 22765
find directory -not \( -name temp -o -name 3.php -o -name c -prune \) -delete

Un rapide test a montré que cela fonctionnait dans ce cas précis, du moins. S'il y a des sous-répertoires nommés par exemple c ou autre, je crois que vous pourriez les exclure aussi. Il est facile de le faire fonctionner dans les cas généraux, mais définir une commande find en toute généralité demande quelques essais.

Testez sans l'instruction "-delete" pour voir quels fichiers sont concernés.

PRESSTOP : find change son comportement lorsque -delete est spécifié ( find avertit à ce sujet et ne veut pas continuer lorsque -prune est spécifié). Vous pouvez toujours diriger la sortie vers xargs y rm ou écrire -execdir rm {} \; au lieu de -delete mais

Exemples :

find directory -not \( -name directory -o -name 3.php -o -name c -prune \) -execdir rm -r {} \;
find directory -not \( -name directory -o -name 3.php -o -name c -prune \) -print0 | xargs -0 rm -r

C'est toujours une affaire délicate, et lorsque le but est de supprimer des fichiers, il faut faire des tests approfondis. J'ai un certain nombre de cas similaires find et je ne peux pas dire que je n'étais pas nerveux de les libérer :-)

1voto

John Brown Points 1

Essayez le script suivant en pseudo perl :

#request the file you don't want to delete and store the name in a scalar variable.

opendir(DIRHANDLE, ".") || die "Could not open Directory handle."; @list = readdir(DIRHANDLE);

foreach $name (@list) { if($name != $your_input_variable) { unlink($name); } else {
}
}

1voto

mbb Points 2416

Mon instinct me dit ceci : si vous n'avez qu'un seul fichier à sauvegarder et un seul répertoire, copiez-les dans un endroit sûr, puis effacez le reste.

cp /dir/file.txt /safe/dir/
cp -R /dir/to/save /safe/dir/
rm -rf /dir/

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X