Réponses:
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
de lister un répertoire, il l'ouvre, c'est la même chose que faire ls -l BirthdayPhotos
. Vous pouvez supprimer ce comportement avec ls -d B*
.
B*
comme une spécification de répertoire?
B*
développe pour correspondre à tous les répertoires commençant par, de B
sorte que vous passez réellement ls
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 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 find
commande pour rechercher le nom de fichier en utilisant un motif
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 que find
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 simplement 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 grep
. 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.)
find | grep
quand find
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
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é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 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"
Si vous ne connaissez pas le répertoire dans ABC*
lequel se trouvent les fichiers et que vous avez des millions de fichiers, la locate
commande est la méthode la plus rapide.
$ locate /ABC
/mnt/clone/home/rick/.cache/mozilla/firefox/9fu0cuql.default/cache2/entries/ABC6AD2FEC16465049B48D39FD2FE538258F2A34
/mnt/clone/home/rick/.cache/mozilla/firefox/9fu0cuql.default/cache2/entries/ABCBFDA54262F47253F95ED6ED4131A465EE0E39
/mnt/clone/usr/src/linux-headers-5.0.1-050001/tools/lib/lockdep/tests/ABCABC.sh
/mnt/clone/usr/src/linux-headers-5.0.1-050001/tools/lib/lockdep/tests/ABCDBCDA.sh
/mnt/clone/usr/src/linux-headers-5.0.1-050001/tools/lib/lockdep/tests/ABCDBDDA.sh
/mnt/old/home/rick/.cache/mozilla/firefox/3vkvi6ov.default/cache2/entries/ABC0C99FCEABAD0C6AA2078CD025A1CDE48D7BA1
/usr/src/linux-headers-5.0.1-050001/tools/lib/lockdep/tests/ABCABC.sh
/usr/src/linux-headers-5.0.1-050001/tools/lib/lockdep/tests/ABCDBCDA.sh
/usr/src/linux-headers-5.0.1-050001/tools/lib/lockdep/tests/ABCDBDDA.sh
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 .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.
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 },".")'
printf "%s" /path/to/files/ABC*
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:
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 manière lors de l'exécution de 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.
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. Vous tr
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 recommanderais printf "%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:
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
En outre, vous pouvez écrire à l'intérieur vim
:CommandT
Vraiment utile surtout dans les grands dossiers.
Supposons que je suis au répertoire racine et que je ne veux que la liste du répertoire etc: nous écrivons,
find -type d -name "etc"
résultat nous obtenons,
[root@unix /]# find -type d -name "etc"
./etc
./usr/lib/firefox/bundled/etc
./usr/lib/unix-yarn/etc
./usr/lib/unix/etc
./usr/lib/festival/etc
./usr/bin/lib/vmware-tools/lib64/libconf/etc
./usr/bin/lib/vmware-tools/lib32/libconf/etc
./usr/etc
./usr/share/doc/oddjob-0.30/sample/etc
./usr/share/festival/lib/etc
./usr/local/etc
./usr/java/jdk1.7.0_25/lib/visualvm/etc
./home/user1/Desktop/VMware Tools/vmware-tools-distrib/lib/lib64/libconf/etc
./home/user1/Desktop/VMware Tools/vmware-tools-distrib/lib/lib32/libconf/etc
./home/user1/Desktop/VMware Tools/vmware-tools-distrib/etc
./home/user1/Desktop/VMware Tools/vmware-tools-distrib/caf/etc
Un autre exemple,
Nous pouvons aussi écrire:
ls | grep "etc"
on a,
etc
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?