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.
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.
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
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
.
' '
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.)
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
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).
Ensuite, tapez simplement le expression régulièreABC*
et validez.
Chaque fichier dont le nom correspond à votre modèle sera automatiquement sélectionné.
J'utilise Nautilus 3.6. * À partir de GNOME PPA sur Ubuntu 12.10 (Quantal).
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.
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"
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.
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:
Comme vous pouvez le voir
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 vim
name__
:CommandT
Vraiment utile surtout dans les grands dossiers.
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 },".")'