Utilisation de find - Suppression de tous les fichiers / répertoires (sous Linux) sauf un
Si nous voulons supprimer tous les fichiers et répertoires que nous utilisons, rm -rf *
.
Mais si je veux tous les fichiers et répertoires être supprimé à un coup de feu, à l'exception de l'un fichier en particulier?
Est-il une commande pour cela? rm -rf *
donne la facilité de la suppression, à un coup, mais supprime même mon préféré de fichier/répertoire.
Merci d'avance
source d'informationauteur kingsmasher1
Vous devez vous connecter pour publier un commentaire.
trouver
peut être un très bon ami:Explication:
find * -maxdepth 0
: sélectionner tout sélectionné par*
sans sombrer dans tous les répertoires-name 'b' -prune
: ne pas déranger (-prune
) avec tout ce qui, correspond à la condition-name 'b'
-o -exec rm -rf '{}' ';'
: appelrm -rf
pour tout le restePar la voie, un autre, éventuellement plus simple, serait de déplacer ou de renommer vos préféré répertoire de sorte qu'il n'est pas dans le chemin:
Réponse courte
Détails:
Le processus de pensée de la commande ci-dessus est :
Exemple
Créer 5 fichiers comme indiqué ci-dessous:
Liste de tous les fichiers sauf z.txt
Nous pouvons maintenant supprimer(rm) la liste des fichiers à l'aide de la xargs utilitaire :
Vous pouvez taper directement dans la ligne de commande ou d'utiliser cette combinaison de touches dans le script
P. S. je suggère
-i
commutateur pourrm
pour éviter delition de données importantes.P. P. S Vous pouvez écrire le petit script en fonction de cette solution et de le placer à la
/usr/bin
(par exemple/usr/bin/rmf
). Maintenant, vous pouvez l'utiliser comme et ordinaire application:Le script ressemble (un sketch):
Au moins dans zsh
pourrait être une option, si vous souhaitez conserver un seul fichier.
Si c'est juste un fichier, un moyen simple est de déplacer ce fichier à
/tmp
ou quelque chose,rm -Rf
le répertoire, puis replacez-le. Vous pourriez alias cela comme une simple commande.L'autre option est de faire un
find
et puisgrep
ce que vous ne voulez pas (à l'aide de-v
ou directement à l'aide de l'un defind
s prédicats) et puisrm
ing les fichiers restants.Pour un seul fichier, je ferais l'ancien. Rien de plus, j'avais écris quelque chose sur mesure similaire à ce que thkala dit.
En bash, vous avez la
!()
glob opérateur, qui inverse le motif correspondant. Donc, pour supprimer tout sauf le fichiermy_file_name.txt
essayez ceci:Voir cet article pour plus de détails:
http://karper.wordpress.com/2010/11/17/deleting-all-files-in-a-directory-with-exceptions/
Je ne connais pas de tel programme, mais j'ai voulu dans le passé pour une fois. La syntaxe de base serait:
Le programme j'ai en tête dispose de trois modes:
-e
)glob
correspondant (par défaut, comme illustré dans l'exemple ci-dessus)-r
)Il faut les modèles soient exclus de la ligne de commande, suivi par le séparateur
--
suivi par les noms de fichier. Sinon, les noms de fichier peut être lu à partir destdin
(si l'option-s
est donné), chacun sur une ligne.Un tel programme ne doit pas être difficile à écrire, en C ou le Shell de Commande de la Langue. Et il fait un bon exercice pour l'apprentissage de l'Unix de base. Quand vous le faites comme un programme shell, vous devez regarder pour les noms de fichiers contenant des espaces et autres caractères spéciaux, bien sûr.
Je vois beaucoup de longwinded signifie ici que le travail, mais avec
a/b/c/d/e/
cela supprime tout sauf le répertoire b/et son contenu (en supposant que votre fichier est en b/.
Puis il suffit de cd b/et
d'enlever tout le reste, mais le fichier (nommé "nom de fichier") que vous souhaitez conserver.
Cela semble fastidieux, mais il est plutôt sûr
rm -rf *
ses résultats dépendent de votre répertoire courant (qui pourrait être/
😉*
: son expansion est limitée par ARGV_MAX.vous avez besoin pour utiliser une expression régulière pour cela. Écrire une expression régulière qui sélectionne tous les autres fichiers à l'exception de celui dont vous avez besoin.