Comment rechercher tous les fichiers commençant par le nom "ABC" dans un répertoire?

30

Je dois rechercher des fichiers commençant par un nom particulier. Il peut y avoir plusieurs fichiers commençant par un modèle particulier et je souhaite répertorier tous ces fichiers présents dans le répertoire.

    
posée R11G 05.12.2012 - 07:00
la source

10 réponses

30

Pour compléter les réponses existantes:

ls

L'utilitaire de liste de répertoires par défaut ls peut être utilisé en combinaison avec les caractères génériques du shell. Pour rechercher tous les fichiers avec le motif abc :

ls abc*   # list all files starting with abc---
ls *abc*  # list all files containing --abc--
ls *abc   # list all files ending with --abc

Notez que l’extension du fichier est également pertinente pour les résultats de la recherche.

tree

Au cas où nous aurions besoin de lister des fichiers dans une arborescence de répertoires, nous pouvons également émettre tree pour rechercher un modèle comme:

tree -P 'abc*'  # list directory tree of file starting with abc---
tree -l 'def*'  # exclude files starting with def---

Dans ce cas, tree supporte lui-même les caractères génériques.

    
réponse donnée Takkat 05.12.2012 - 08:42
la source
24

Vous pouvez utiliser la commande find pour rechercher des fichiers avec un motif

find . -type f -name "abc*" 

La commande ci-dessus recherche le fichier qui commence par abc dans le répertoire de travail actuel.

-name 'abc' listera les fichiers qui correspondent exactement. Par exemple: abc

Vous pouvez également utiliser

 -iname
 -regex 

option avec la commande find pour rechercher un nom de fichier à l'aide d'un motif

    
réponse donnée devav2 05.12.2012 - 07:48
la source
6

Il y a plusieurs façons de le faire, en fonction de ce que vous voulez en faire. Généralement, si vous voulez simplement les lister, vous pouvez le faire dans un terminal en utilisant:

find | grep '^\./ABC'

... et en remplaçant ABC par votre texte.

Pour comprendre la commande, décomposons un peu:

  • find répertorie tous les fichiers du répertoire en cours et de ses sous-répertoires; l'utiliser seul listera tout ce qu'il y a. Notez que find affiche chaque fichier ou répertoire commençant par ./ , indiquant que leur chemin est relatif au répertoire en cours. Être conscient de cela est important car cela signifie que nous rechercherons les résultats à partir de ./ABC et pas seulement de ABC .

  • Le caractère de canal | redirige la sortie d'une commande vers une autre, dans ce cas la sortie de find est redirigée vers grep . Ceci s'appelle la tuyauterie.

  • grep prend la sortie et la filtre en utilisant le modèle donné, ^\./ABC .

    • Notez que le modèle est cité avec des guillemets simples ' ' pour empêcher le shell d'interpréter les caractères spéciaux qu'il contient.
  • Maintenant, le modèle lui-même est écrit dans une syntaxe particulière appelée expression régulière ou expression régulière . Regex est un outil de recherche extrêmement puissant si vous le maîtrisez, et il existe des sites tels que ce qui vous en apprendra plus en profondeur , mais notez que grep n'est pas un moteur de regex à part entière et que vous ne pouvez pas tout faire avec.

  • Pour notre propos:

    • ^ en regex correspond au début de la chaîne; Cela l'empêche de correspondre au modèle s'il ne se produit pas au début du nom de fichier.

    • . dans les expressions rationnelles a aussi une signification particulière: cela signifie que "correspond à n'importe quel caractère". Si vous voulez l'utiliser comme un point littéral, vous devrez l'échapper en utilisant une barre oblique inverse \ avant. (Ouais, faire correspondre n'importe quel personnage serait sans danger dans notre cas, mais je l'ai fait pour être complet.)

réponse donnée Yamaho 05.12.2012 - 07:58
la source
3

vous pouvez utiliser GREP, je pense que c'est la solution la plus simple, probablement aussi ajouter d'autres paramètres de grep pour rendre la correspondance plus précise

tree | grep ABC
    
réponse donnée Tomáš Tibenský 30.03.2015 - 13:32
la source
1

Vous pouvez rechercher un modèle particulier à l'aide du gestionnaire de fichiers Nautilus et des expressions régulières.

Pour cela, cliquez sur Sélectionner les éléments correspondants dans le menu Gear (voir ci-dessous) (vous pouvez également appuyer sur Ctrl + s ). / p>

Ensuite, tapez simplement la expression régulière ABC* et validez.

Chaque fichier dont le nom correspond à votre modèle sera automatiquement sélectionné.

J'utilise Nautilus 3.6. * à partir de GNOME3 PPA sous Ubuntu 12.10 (Quantal).

    
réponse donnée remjg 05.12.2012 - 16:06
la source
1

J'utilise

ls | grep abc

ou

ls -la | grep abc

Il montre tous les fichiers avec abc, pas seulement en commençant par abc. Mais c’est un moyen très facile pour moi de le faire.

    
réponse donnée Mariano Cali 18.06.2015 - 00:37
la source
1

La solution la plus simple pour moi

ls | grep PATTERN

Ici, vous pouvez donner n'importe quelle expression régulière dans le motif.

Par exemple, pour trouver des fichiers avec "ab" n'importe où dans son nom, tapez

ls | grep ".*ab.*"

Pour trouver les fichiers commençant par "ab", tapez

ls | grep "^ab"
    
réponse donnée Preetom Saha Arko 11.07.2017 - 06:20
la source
0

Python:

$ python -c 'import sys,os;found=[os.path.join(r,i) for r,s,f in os.walk(".") for i in f if i.startswith("ABC")];map(lambda x: sys.stdout.write(x+"\n") ,found)'

Perl:

$ perl -le 'use File::Find;find(sub{ -f && $_ =~/^ABC/ && print $File::Find::name  },".")' 
    
réponse donnée Sergiy Kolodyazhnyy 13.07.2017 - 05:36
la source
0
printf "%s" /path/to/files/ABC*

Ceci est une correspondance de modèle de globes qui est ancrée aux deux extrémités. Cela correspondra à toutes les occurrences des fichiers commençant par "ABC" tels que "ABC", "ABC.txt", "ABC123", mais pas "xABC". À partir de la ligne de commande utilisant «ls» à la place de «printf», voici une alternative sûre. Toutefois, selon l'opinion de qui vous êtes d'accord, «ls» ne peut pas être utilisé dans un script. Dans ce cas, l'utilisation de 'printf' avec une correspondance de modèle glob est considérée comme sûre. Si vous utilisez ceci dans un script, la sortie de 'printf' ne contiendra pas de nouveau caractère de ligne jusqu'à la fin du flux de sortie en tant que tel:

printf "%s" /path/to/files/ABC*  

Retourne:

/path/to/files/ABC /path/to/files/ABC123

Si vous avez besoin de sauts de ligne après chaque instance:

printf "%s\n" /path/to/files/ABC*

Retourne:

/path/to/files/ABC 

/path/to/files/ABC123

"/ path / to / files /" reste dans la sortie si vous l'avez entré de cette manière lorsque vous avez exécuté la commande 'printf'. Sans elle, seul le nom du fichier apparaît:

printf "%s" ABC* 

Retours

ABC ABC123

En supposant que vous exécutiez la commande dans le répertoire dans lequel les fichiers existent.

    
réponse donnée EnterUserNameHere 13.07.2017 - 09:07
la source
0

Commande-t dans l’un de mes plug-ins vim favoris, c’est un plug-in basé sur Ruby au-dessus de l’intégration avec FZF.

En utilisant Comamnd-T et FZF, vous pouvez effectuer la recherche avec un mécanisme "flou" extrêmement rapide pour:

  • Ouverture de fichiers et de tampons
  • Passer aux balises et à l’aide
  • Exécuter des commandes ou des recherches et des commandes précédentes
  • avec un nombre minimal de frappes.

Comme vous pouvez le voir

Je recherche toujours dans l’historique des commandes en ouvrant un nouveau terminal et en tapant:

CTRL+R

En plus de rechercher dans tous les dossiers de manière récursive en écrivant dans n'importe quel onglet de terminal:

fzf

Puis commencez votre nom de fichier

ABC

En outre, vous pouvez écrire dans vim

:CommandT 

Très utile surtout dans les grands dossiers.

    
réponse donnée HMagdy 30.01.2018 - 00:18
la source

Lire d'autres questions sur les étiquettes