GNU/Linux >> Tutoriels Linux >  >> Linux

Comment supprimer des fichiers et des répertoires sous Linux

Cet article poursuit une série d'articles sur le shell Linux et couvre les trois méthodes les plus utiles pour supprimer des fichiers et des répertoires. Nous avons également couvert des cas exceptionnels tels que la suppression de répertoires contenant un grand nombre de fichiers, la suppression de fichiers ou de répertoires contenant des caractères spéciaux dans leurs noms. Améliorez vos compétences Linux en seulement 5 minutes.

Commande "rmdir"

Avant d'utiliser le rmdir commande, vous devez savoir que vous ne récupérerez pas facilement les objets supprimés.

Maintenant, ouvrez le terminal de ligne de commande si vous utilisez Linux ou macOS. Si vous utilisez Windows, vous pouvez utiliser le sous-système Windows pour Linux (WSL).

Avant de supprimer le répertoire, créons-le d'abord :

$ mkdir /tmp/docs

Maintenant, supprimons-le par le nom /tmp/docs en utilisant la commande suivante :

$ rmdir /tmp/docs

rmdir est une commande pour supprimer les répertoires vides. C'est très utile, car vous êtes protégé contre la suppression de quelque chose d'important de votre système de fichiers.

Validons ce comportement en plaçant un fichier dans un répertoire, que nous aimerions supprimer :

$ mkdir -p /tmp/docs

$ touch /tmp/docs/my_file

$ tree /tmp/docs

/tmp/docs
└── my_file

0 directories, 1 file

Si votre répertoire n'est pas vide, vous recevrez l'erreur suivante :

$ rmdir /tmp/docs
rmdir: /tmp/docs: Directory not empty

Pour supprimer le répertoire contenant des fichiers, vous devez utiliser le rm commande :

$ rm -rf /tmp/docs

Supprimer plusieurs répertoires à l'aide de caractères génériques

Toutes les commandes de la console sous Linux peuvent traiter des fichiers et des dossiers en utilisant des caractères génériques (*) dans le nom du fichier ou du dossier. Supprimons la structure de dossiers suivante :

$ tree /tmp/docs
/tmp/docs
├── dir1
├── dir2
└── dir3

3 directories, 0 files

Pour supprimer tous les répertoires, à partir du dir nous devons utiliser la commande suivante :

$ rmdir /tmp/docs/dir*

Voici le résultat attendu :

$ tree /tmp/docs
/tmp/docs

0 directories, 0 files

Commande "rm"

La rm La commande est une commande à usage général qui peut supprimer non seulement des répertoires mais aussi des fichiers. Mais le comportement par défaut de rm La commande ne vous permet pas de supprimer des dossiers. Vous pouvez utiliser -r ou -R arguments pour supprimer les répertoires, y compris les sous-répertoires.

Imaginons que nous ayons la structure de système de fichiers suivante :

$ tree /tmp/docs
/tmp/docs
├── dir1
│   └── my_file1
├── dir2
│   └── my_file2
└── dir3
    └── my_file3

3 directories, 3 files

Si vous souhaitez supprimer le /tmp/docs répertoire complètement, utilisez la commande suivante :

$ rm -rf /tmp/docs

Où :

  • -r – une tentative de suppression de tous les sous-répertoires d'un répertoire particulier.
  • -f – une tentative de suppression des fichiers sans confirmation ou autorisation préalable.

/bin/rm :liste d'arguments trop longue

Vous pouvez obtenir ce message d'erreur lorsque vous essayez de supprimer un répertoire contenant de nombreux fichiers. Cette erreur se produit car le nombre de fichiers fournis au rm commande est supérieure à la limite système de la taille de l'argument de ligne de commande.

Le moyen le plus simple de supprimer un tel dossier consiste à utiliser rechercher commande pour supprimer d'abord tous les fichiers, puis supprimer le répertoire lui-même :

$ find /tmp/docs -type f -delete

$ rm -r /tmp/docs

Ici :

  • /tmp/docs – répertoire pour la recherche.
  • -type f - indique à l'utilitaire de recherche de rechercher uniquement des fichiers.
  • -supprimer - indique à l'utilitaire de recherche de supprimer les résultats trouvés.

Vous pouvez également créer un dossier vide et utiliser rsync utilitaire :

$ mkdir empty_dir

$ rsync -a --delete empty_dir/ /tmp/docs/

Cela consomme beaucoup de CPU, mais c'est le moyen le plus rapide de nettoyer /tmp/docs répertoire.

commande "find"

La commande find est un utilitaire de ligne de commande de recherche polyvalent, qui nécessite un article distinct, mais dans notre cas, nous l'utiliserons pour supprimer les dossiers.

Supprimer en utilisant le modèle dans le nom

Supprimons tous les répertoires par le modèle dir* dans les noms de répertoires imbriqués :

$ tree /tmp/docs
/tmp/docs
├── dir1
│   └── my_file1
├── dir2
│   └── my_file2
└── dir3
    └── my_file3

3 directories, 3 files

Utilisez la commande suivante pour cela :

$ find /tmp/docs -type d -name 'dir*' -exec rm -rf {} +

$ tree /tmp/docs
/tmp/docs

0 directories, 0 files

Ici, la découverte La commande renverra tous les répertoires imbriqués dont le nom commence par le dir :

$ find /tmp/docs -type d -name 'dir*'
/tmp/docs/dir2
/tmp/docs/dir3
/tmp/docs/dir1

Et puis il exécute le déjà familier rm -rf commande pour chaque résultat (c'est pourquoi nous utilisons {} + séquence).

Supprimer tous les répertoires vides dans la structure des dossiers

Dans de nombreux cas, vous souhaiterez peut-être supprimer uniquement les dossiers vides dans la structure de dossiers. Supprimons dir1 et autre_répertoire à partir de l'exemple suivant :

$ tree /tmp/docs
/tmp/docs
├── dir1
├── dir2
│   └── my_file2
├── dir3
│   └── my_file3
└── other_dir

4 directories, 2 files

Voici comment procéder :

$ find /tmp/docs -type d -empty -delete

$ tree /tmp/docs
/tmp/docs
├── dir2
│   └── my_file2
└── dir3
    └── my_file3

2 directories, 2 files

Supprimer les fichiers avec des caractères spéciaux (par inode)

Si le nom de votre répertoire contient des caractères spéciaux ou se compose de mots non anglais, alors rm habituel ou rmdir la commande peut ne pas fonctionner pour vous. Dans ce cas, vous pouvez supprimer ce répertoire en utilisant son inode.

Inode - est un numéro de nœud d'index qui représente un fichier ou un répertoire sur le système de fichiers.

Vous pouvez trouver le numéro d'inode du fichier ou du répertoire à l'aide de la commande suivante :

$ ls -il /tmp/docs
total 0
8669007889 drwxr-xr-x  3 amaksimov  wheel  96 Dec  1 18:48 dir2
8669007891 drwxr-xr-x  3 amaksimov  wheel  96 Dec  1 18:46 dir3

Dans cet exemple, dir2 le dossier a l'inode 8669007889 numéro.

Maintenant, nous pouvons utiliser ces informations pour les supprimer :

$ find /tmp/docs -inum 8669007889 -exec rm -rf {} +

Ici :

  • -inum - indique à l'utilitaire de recherche de rechercher l'objet du système de fichiers avec le numéro d'inode 8669007889 .
  • -exec rm-rf - indique à l'utilitaire de recherche d'appeler rm avec -rm arguments pour chaque résultat ({} + ).

Résumé

Dans cet article, nous avons décrit trois manières de supprimer des répertoires sous Linux. Nous avons également couvert des cas particuliers comme la suppression d'énormes dossiers ou répertoires avec des caractères spéciaux dans leurs noms.

Nous espérons que vous trouverez cet article utile. Si oui, s'il vous plaît, aidez-nous à le diffuser dans le monde entier.

Si vous connaissez d'autres cas d'utilisation intéressants, qui pourraient être couverts par l'article, veuillez nous contacter dans la section commentaires ci-dessous.


Linux
  1. Comment rechercher et supprimer des répertoires de manière récursive sous Linux

  2. Comment supprimer des fichiers et des répertoires sous Linux à partir de la ligne de commande

  3. Linux Supprimer des fichiers et des répertoires

  4. Comment désactiver la suppression automatique des fichiers dans les répertoires /tmp et /var/tmp dans CentOS / RHEL 5,6

  5. Comment changer /tmp par défaut en /home/user/tmp

Comment compresser des fichiers et des répertoires sous Linux

Comment supprimer (supprimer) le répertoire sous Linux

Comment rechercher et supprimer des répertoires vides sous Linux

Comment supprimer des fichiers et des répertoires sur un terminal Linux

Comment supprimer/supprimer des fichiers sous Linux à l'aide de la commande rm

Comment supprimer des fichiers et des répertoires à l'aide de la ligne de commande Linux