Maison  >  Article  >  développement back-end  >  3 façons de supprimer des fichiers spécifiques dans un répertoire à l'aide du shell bash

3 façons de supprimer des fichiers spécifiques dans un répertoire à l'aide du shell bash

高洛峰
高洛峰original
2017-01-09 13:24:221880parcourir

Je suis un nouvel utilisateur Linux. Maintenant, je dois nettoyer les fichiers dans un répertoire de téléchargement. En fait, je veux juste supprimer tous les fichiers du dossier ~/Download/ à l'exception des fichiers aux formats suivants :

1.*.iso - tous les fichiers aux formats iso.
2.*.zip - Tous les fichiers au format zip.

Comment supprimer des fichiers spécifiques dans un shell bash sur un système Linux, OS X ou de type Unix ?

Le shell Bash prend en charge les caractères riches de correspondance de modèles de fichiers tels que :

1.* - correspond à tous les fichiers.
2.? - Correspond à une seule lettre dans un nom de fichier.
3.[...] - Correspond à n'importe quelle lettre entre parenthèses.

Stratégie n°1 : Rencontrez les caractères de correspondance de modèles étendus

Ici, vous devez utiliser la commande shopt intégrée du système pour activer l'option extglob dans le shell, puis vous pouvez utiliser l'option étendue caractères de correspondance de modèle, ces correspondants de modèle sont les suivants :

1.? (liste de modèles) - Correspond au modèle donné zéro ou une fois.
2.*(Liste de modèles) – Correspond au modèle donné zéro ou plusieurs fois.
3. (Liste de modèles) - Faites correspondre le modèle donné au moins une fois.
4.@(liste de modèles) - Faites correspondre le modèle donné une fois.
5.!(liste de modèles) - ne correspond pas au modèle donné.

Une liste de modèles est constituée d'un ou plusieurs modèles (noms de fichiers) séparés par |.

Activez d'abord l'option extgolb :

shopt -s extglob

Supprimez tous les fichiers sauf les fichiers .zip et .iso dans Bash
Le format de syntaxe de la commande rm est :

## 仅保留 file1 文件 ##
rm  !(file1)
 
## 仅保留 file1 和 file2 文件## 
rm  !(file1|file2)
 
## 仅保留 zip 文件 ##
rm  !(*.zip)
 
## 仅保留 zip 和 iso 文件 ##
rm  !(*.zip|*.iso)
 
## 你也可以使用完整的目录 ##
rm /Users/vivek/!(*.zip|*.iso|*.mp3)
 
## 也可以传递参数 ##
rm [选项]  !(*.zip|*.iso)
rm -v  !(*.zip|*.iso)
rm -f  !(*.zip|*.iso)
rm -v -i  !(*.php)

Stratégie n°2 : Utilisez la variable GLOBIGNORE de bash pour supprimer tous les fichiers à l'exception du fichier spécifié

Extrait de la page de manuel bash(1) :

Il s'agit d'un modèle séparé par deux points Une liste qui définit un ensemble de fichiers à ignorer lors de l'expansion du chemin. Si un fichier correspondant à un modèle d'expansion de chemin correspond également à un modèle dans GLOBIGNORE, il est supprimé de la liste de correspondances.

Pour supprimer tous les fichiers et conserver uniquement les fichiers zip et iso, définissez GLOBIGNORE comme suit :

## 只在 BASH 中可行 ##
cd ~/Downloads/
GLOBIGNORE=*.zip:*.iso
rm -v *
unset GLOBIGNORE

Stratégie n°3 : utilisez la commande find pour supprimer tous les autres fichiers et conserver uniquement les fichiers zip et iso files

Si vous utilisez tcsh/csh/sh/ksh ou d'autres shells, vous pouvez essayer de supprimer des fichiers en utilisant la syntaxe de commande find suivante sur les systèmes de type Unix :

find /dir/ -type f -not -name '匹配模式' -delete

ou

## 对于怪异的文件名可以使用 xargs ##
find /dir/ -type f -not -name '匹配模式' -print0 | xargs -0 -I {} rm {}
find /dir/ -type f -not -name '匹配模式' -print0 | xargs -0 -I {} rm [选项] {}

Si vous souhaitez supprimer des fichiers autres que php dans le répertoire ~/source, tapez :

find ~/sources/ -type f -not -name '*.php' -delete

ou

find ~/sources/ -type f -not -name '*.php' -print0 | xargs -0 -I {} rm -v {}

pour ne conserver que * .zip et * La syntaxe du fichier .iso est la suivante :

find . -type f -not \( -name '*zip' -or -name '*iso' \) -delete


Pour plus d'articles shell liés à la suppression de fichiers spécifiques, veuillez faire attention au chinois PHP site web!


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn