web-dev-qa-db-fra.com

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

Je dois rechercher des fichiers commençant par un nom particulier. Il peut y avoir plusieurs fichiers commençant par un motif particulier et je veux lister tous les fichiers présents dans le répertoire.

52
R11G

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 de fichier est également pertinente pour les résultats de la recherche.


tree

Dans le cas où nous aurions besoin de lister les fichiers dans une arborescence de répertoires, nous pouvons aussi émettre tree pour rechercher un motif comme:

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

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

53
Takkat

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

find . -type f -name "abc*" 

La commande ci-dessus va rechercher le fichier qui commence par abc dans le répertoire de travail en cours.

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

Vous pouvez aussi utiliser

 -iname
 -regex 

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

33
devav2

Il y a plusieurs façons de le faire, en fonction de ce que vous voulez en faire. Généralement, si vous voulez juste 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-la un peu:

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

  • Le caractère de pipe | 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 le résultat et le 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 motif lui-même est écrit dans une syntaxe particulière appelée expression régulière , ou regex pour faire court. Regex est un outil de recherche extrêmement puissant si vous le maîtrisez et il existe des sites tels que this qui vous en apprennent plus à ce sujet, mais notez que grep n'est pas un moteur de regex à part entière et vous pouvez fais pas tout avec ça.

  • Pour notre but:

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

    • . dans regex a aussi une signification spéciale: cela signifie "faire correspondre n'importe quel caractère ici". Si vous voulez l'utiliser comme un point littéral, vous devrez "l'échapper" en utilisant une barre oblique inverse \ avant celle-ci. (Ouais, faire correspondre n'importe quel personnage serait sans danger dans notre cas, mais je l'ai fait par souci de complétude.)

6
Yamaho

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
2
Tomáš Tibenský

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

Pour ce faire, cliquez sur . Sélectionnez les éléments correspondants dans le menu Gear comme ci-dessous (vous pouvez également appuyer sur Ctrl+s).

enter image description here

Ensuite, tapez simplement le expression régulièreABC* et validez.

enter image description here

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

enter image description here

J'utilise Nautilus 3.6. * À partir de GNOME PPA sur Ubuntu 12.10 (Quantal).

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

Il s'agit d'une correspondance de motif global qui est ancrée aux deux extrémités. Cela correspond à toutes les occurrences de fichiers commençant par "ABC", telles 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 votre opinion, "ls" n'est pas sûr pour une utilisation dans un script. Dans ce cas, utiliser 'printf' avec la correspondance de motif glob est considéré comme sûr. Si vous allez utiliser ceci dans un script, le résultat 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*  

Résultats:

/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*

Résultats:

/path/to/files/ABC 

/path/to/files/ABC123

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

printf "%s" ABC* 

Résultats

ABC ABC123

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

0
EnterUserNameHere

La solution la plus facile pour moi

ls | grep PATTERN

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

Par exemple, pour rechercher 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"
0
Preetom Saha Arko

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 faire cela.

0
Mariano Cali

Command-t dans l'un de mes plugins vim préférés, il s'agit du plugin 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 extrêmement "fuzzy" pour:

  • Ouverture de fichiers et de tampons
  • Saut aux tags et aide
  • Exécution de commandes ou recherches et commandes précédentes
  • avec un nombre minimal de frappes.

Comme vous pouvez le voir

enter image description here

Je cherche toujours dans l'historique des commandes en ouvrant un nouveau terminal et clique sur:

CTRL+R

En plus de la recherche récursive dans tous les dossiers en écrivant dans n’importe quel onglet de terminal:

fzf

Puis commencez votre nom de fichier

ABC

De plus, vous pouvez écrire dans vimname__

:CommandT 

Vraiment utile surtout dans les grands dossiers.

0
HMagdy

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  },".")' 
0
Sergiy Kolodyazhnyy