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.
58
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 un 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 répertorier les fichiers dans une arborescence de répertoires, nous pouvons également demander tree
à rechercher un modèle donné tel que:
tree -P 'abc*' # list directory tree of file starting with abc---
tree -l 'def*' # exclude files starting with def---
Dans ce cas, tree
lui - même prend en charge les caractères génériques.
ls -l B*
, affiche - t-il le contenu de tous les répertoires commençant parB
au lieu de simplement les noms des répertoires correspondants?ls
de lister un répertoire, il l'ouvre, c'est la même chose que fairels -l BirthdayPhotos
. Vous pouvez supprimer ce comportement avecls -d B*
.B*
comme une spécification de répertoire?B*
développe pour correspondre à tous les répertoires commençant par, deB
sorte que vous passez réellementls
une liste de répertoires, de sorte qu'elle les ouvre tous pour vous.ls -d ABC*
était ce que l'auteur demandait. De plus, les commentaires dans l'extrait de code sont erronés,ls abc*
répertorie le contenu des répertoires commençant par abc.Vous pouvez utiliser la
find
commande pour rechercher des fichiers avec un motifLa 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: abcVous pouvez aussi utiliser
option avec
find
commande pour rechercher le nom de fichier en utilisant un motifla source
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
répertorie 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 quefind
chaque fichier ou répertoire commence par un./
, indiquant que son chemin est relatif au répertoire actuel. En être conscient est important car cela signifie que nous rechercherons des résultats en commençant par./ABC
et non pas simplementABC
.Le caractère de canal
|
redirige la sortie d'une commande vers une autre, dans ce cas, la sortie defind
est redirigéegrep
. Ceci s'appelle la tuyauterie.grep
prend la sortie et les filtres à l'aide du motif donné,^\./ABC
.' '
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 en abrégé. Regex est un outil de recherche extrêmement puissant si vous le maîtrisez. Il existe des sites tels que celui-ci qui vous en apprennent plus sur le sujet, mais notez que ce
grep
n'est pas un moteur de regex à part entière et que vous ne pouvez pas tout faire avec.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 "faites correspondre n'importe quel caractère ici". Si vous souhaitez 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.)la source
find | grep
quandfind
a ses propres capacités de correspondance de motif parfaitement bonnes?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
la source
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électionner les éléments correspondants dans le menu Matériel comme ci-dessous (vous pouvez également appuyer sur Ctrl+ s).
Ensuite, tapez simplement l' 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 sur Ubuntu 12.10 (Quantal).
la source
La solution la plus facile pour moi
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
Pour trouver les fichiers commençant par "ab", tapez
la source
Si vous ne connaissez pas le répertoire dans
ABC*
lequel se trouvent les fichiers et que vous avez des millions de fichiers, lalocate
commande est la méthode la plus rapide.Remarques:
find
commande commençant au/
répertoire racine durera très longtemps et générera de nombreuses erreurs d'autorisation.sudo updatedb
abord les exécuter .la source
j'utilise
ou
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.
la source
Python:
Perl:
la source
Ceci est une correspondance de motif glob 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 sans danger 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:
Résultats:
Si vous avez besoin de sauts de ligne après chaque instance:
Résultats:
"/ path / to / files /" reste dans la sortie si vous l'avez entré de cette manière lors de l'exécution de la commande 'printf'. Sans cela, seul le nom du fichier apparaît:
Résultats
En supposant que vous exécutiez la commande dans le répertoire dans lequel les fichiers existent.
la source
echo /path/to/files/ABC* | tr " " "\n"
n'est pas une bonne idée. Considérez s'il y a un fichier/path/to/files/ABC EFG
, il y a un espace dans le nom du fichier. Voustr
allez diviser le nom de fichier en deux lignes distinctes, ce qui n’est pas bon. Pire encore s'il y a plusieurs espaces dans le nom du fichier. Je vous recommanderaisprintf "%s\n" ABC*
plutôt d' utiliser ce qui devrait aider avec les espaces dans les noms de fichiers, mais reste problématique avec d'autres caractères spéciaux comme\n
Command-t dans l'un de mes plugins vim préférés, c'est un 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:
Comme vous pouvez le voir
Je cherche toujours dans l'historique des commandes en ouvrant un nouveau terminal et clique sur:
En plus de la recherche récursive dans tous les dossiers en écrivant dans n’importe quel onglet de terminal:
Puis commencez votre nom de fichier
En outre, vous pouvez écrire à l'intérieur
vim
Vraiment utile surtout dans les grands dossiers.
la source
Supposons que je suis au répertoire racine et que je ne veux que la liste du répertoire etc: nous écrivons,
résultat nous obtenons,
Un autre exemple,
Nous pouvons aussi écrire:
on a,
la source