Comment supprimer des fichiers et des répertoires sous Linux?

L'une des tâches d'administration de base du système de fichiers consiste à créer, modifier et supprimer différents types de fichiers et de répertoires. Connaître certains outils et concepts de base pour la suppression de fichiers est pratique et peut vous faire gagner du temps.

Linux propose plusieurs outils qui peuvent nous aider à accomplir les tâches de suppression de fichiers. Souvent, nous devons supprimer non seulement un seul, mais un ensemble de fichiers et de répertoires, en fonction de certains critères. Il est utile d'en connaître quelques commandes courantes et leurs combinaisons pour accomplir notre tâche facilement.

Remove using unlink

Pas si populaire. Pour supprimer définitivement un seul fichier, nous pouvons utiliser unlink commander.

$ unlink {file-name}

Remove single file

Il existe une commande plus couramment utilisée pour supprimer des fichiers, à savoir, rm commande, qui prend en charge la suppression d'un ou plusieurs fichiers simultanément.

$ rm {file-name}

rm vous invite à confirmer la suppression de fichiers pour les fichiers protégés en écriture, sinon il procède à la suppression directe du fichier. Faire rm toujours demander avant de supprimer un fichier, utilisez -i drapeau:

$ rm -i {file-name}

rm la commande supprime sans afficher de message à l'écran. Pour lister quoi rm commande est en train de faire, utilisez rm avec -v drapeau.

$ rm -v {file-name}

Pour supprimer des fichiers protégés en écriture sans demander de confirmation, utilisez -f drapeau.

$ rm -f {file-name}

Remove multiple files

Plusieurs fichiers peuvent être supprimés en spécifiant plusieurs noms de fichiers rm comme arguments.

$ rm {file-name-1} {file-name-2} {file-name-3} ... {file-name-N}

rm prend également en charge les expressions régulières. Si vous souhaitez supprimer tous les fichiers nommés file-name-*, vous pouvez utiliser:

$ rm file-name-*

Nous pouvons également spécifier plusieurs fichiers à l'aide d'expressions régulières. Si nous voulons supprimer trois fichiers qui correspondent file-name-1, file-name-2 et file-name-3, nous pouvons utiliser quelque chose comme:

$ rm file-name-[123]

Remove directory

Un répertoire vide peut être supprimé en utilisant rm commande avec -d option.

$ rm -d {dir-name}

Les options prises en charge pour la suppression de fichiers peuvent également être combinées avec la suppression de répertoires à l'aide de -d drapeau aussi. Par exemple:

$ rm -idv {dir-name}

Pour supprimer un répertoire non vide, utilisez -r drapeau.

$ rm -r {dir-name}

Si vous ne voulez aucune invite avant de supprimer le répertoire et son contenu, utilisez -rf drapeau. Cela supprimera tout ce qui se trouve dans le répertoire, y compris le répertoire lui-même, sans aucune confirmation. Soyez prudent lorsque vous l'utilisez en particulier en tant que root.

$ rm -rf {dir-name}

Find and remove files

Pour des exigences plus complexes, nous pouvons utiliser le commande find avec différentes options. Pour supprimer tous les fichiers correspondant au modèle {pattern} à l'intérieur d'un chemin donné par {dir-to-search}

$ find {dir-to-search} -type f -name {pattern} -exec rm -f {} \;

Mise en situation :

$ find /var/tmp -type f -name "*.tmp" -exec rm -f {} \;

Si nous voulons supprimer tout ce qui correspond à un modèle {pattern} y compris les répertoires à l'intérieur {dir-to-search}, nous pouvons légèrement modifier la commande ci-dessus comme:

$ find {dir-to-search} -name {pattern} -exec rm -rf {} \;

Les versions modernes de la commande find prennent en charge la fonction de suppression en interne. Ici -delete flag remplace la commande rm pendant -depth indique à la commande find de traiter d'abord le contenu du répertoire avant le répertoire lui-même:

$ find {dir-to-search} -type f -name {file-name-pattern} -depth -delete

L'exemple ci-dessus est plus efficace lorsque vous travaillez avec un grand nombre de fichiers car il ne génère pas de nouveau processus externe pour rm commande pour chaque fichier correspondant. Mais toutes les versions de find commande (encore) peut prendre en charge -delete drapeau. Comme alternative, nous avons la possibilité d'utiliser xargs commande avec find comme indiqué dans l'exemple suivant ci-dessous:

$ find {dir-to-search} -type f -name {pattern} -print0 | xargs -0 rm

Ou utilisez la commande exec + terminator pour enchaîner tout ce qui est trouvé par la commande find comme xargs:

$ find {dir-to-search} -name {pattern} -exec rm -rf {} +

Par défaut, la commande find utilise -print drapeau que nous omettons généralement d'écrire. Avec xargs, nous devons éviter new-line caractère entre chaque nom de fichier. En tant que tel -print0 le drapeau indique à la recherche d'imprimer null caractère après chaque nom de fichier trouvé.

De même, nous spécifions -0 drapeau avec xargs de sorte que les deux commandes se couplent. rm la commande ici supprime le fichier transmis par piped find contribution. Par exemple, la commande ci-dessous recherchera et supprimera tout *.tmp fichiers du répertoire personnel de l'utilisateur actuel (donné par ~ symbole).

$ find ~ -name "*.tmp" -print0 | xargs -0 rm

find La commande offre plusieurs façons de rechercher des fichiers et des répertoires, y compris la propriété, l'autorisation, l'horodatage, etc. Nous allons couvrir quelques-unes de ces façons qui peuvent nous aider dans des tâches de suppression de fichiers spécifiques.

Find and remove files by a user

Pour supprimer tout ce qui se trouve dans un répertoire donné appartenant à un user, Utiliser:

$ find {dir-to-search} -mindepth 1 -user {user-name} -delete

Dans l'exemple ci-dessus, -mindepth flag avec la valeur 1 empêche le répertoire donné par {dir-to-search} de suppression s'il correspond au modèle et aux critères de recherche. Ou pour supprimer tout ce qui se trouve dans un répertoire donné appartenant à un group, Utiliser:

$ find {dir-to-search} -mindepth 1 -group {group-name} -delete

Si vous ne souhaitez pas parcourir les sous-répertoires sous le chemin de recherche, vous avez également la possibilité d'utiliser -maxdepth avec une valeur de profondeur de répertoire appropriée.

Voici un exemple d'exécution:

$ find tempdir/ -mindepth 1 -maxdepth 1 -user abhisheknair -group abhisheknair -delete

Si vous souhaitez spécifier user-id et group-id à la place, vous pouvez essayer quelque chose comme:

$ find {dir-to-search} -mindepth 1 -uid {user-id} -gid {group-id} -delete

Find and remove empty directories

Pour supprimer tous les répertoires vides dans un chemin donné {dir-to-search}, vous pouvez utiliser:

$ find {dir-to-search} -type d -empty -delete

Au lieu de cela, pour supprimer tous les fichiers vides dans un chemin donné {dir-to-search}, Utiliser:

$ find {dir-to-search} -type f -empty -delete

Find and remove files older than X

Parfois, vous devrez peut-être supprimer des fichiers plus anciens que x journées. find a des options pour lire la création du fichier (ctime), accès (atime) et modification (mtime) fois. On peut utiliser mtime option avec rechercher pour rechercher et supprimer les fichiers modifiés plus de x il y a quelques jours.

$ find {dir-to-search} -type f -mtime +{X} -delete

Par exemple, pour supprimer tous les fichiers avec le journal d'extension à l'intérieur /var/tmp avec une heure de modification d'il y a 30 jours ou plus, nous pouvons utiliser:

$ find /var/tmp -name "*.log" -type f -mtime +30 -delete

Find and remove files by permission

Maintenant, nous pouvons également supprimer des fichiers en fonction d'une autorisation spécifique, comme:

$ find {dir-to-search} -name {pattern} -perm {NNN} -delete

Mise en situation :

$ find /var/tmp -name "temp*" -perm 755 -delete

Ou si nous voulons utiliser une forme symbolique pour l'autorisation, utilisez:

$ find {dir-to-search} -name {pattern} -perm u={rwx},g={rwx},o={rwx} -delete

Mise en situation :

$ find /var/tmp -name "temp*" -perm u=rwx,g=rw,o=rw -delete

résumer

Offres Linux unlink, rm et rmdir commandes qui sont simples et peuvent être facilement étendues avec l'utilisation d'expressions régulières. Pour des besoins plus avancés, vous avez la possibilité d'utiliser une combinaison d'outils tels que find et xargs pour réaliser ce dont vous avez besoin. Outre les exemples de cet article, vous avez la possibilité d'utiliser la recherche avec l'un de ses indicateurs disponibles pour personnaliser votre recherche. Reportez-vous aux pages de manuel pour les commandes respectives pour en savoir plus à leur sujet.

Toujours courir trouver des commandes sans compromis. rm or -delete flag et analysez sa sortie pour savoir quels fichiers ou répertoires seront impactés par l'exécution d'une commande réelle. Avoir une configuration et une politique de sauvegarde appropriées aide non seulement en cas de suppression accidentelle, mais également en cas de défaillance matérielle et cyber-attaques.