166 votes

Rechercher tous les fichiers dont le nom commence par une chaîne de caractères spécifiée ?

J'ai un répertoire contenant environ 100 000 fichiers et je souhaite exécuter une fonction sur tous les fichiers commençant par une chaîne spécifiée, qui peut correspondre à des dizaines de milliers de fichiers.

J'ai essayé

ls mystring*

mais il retourne avec l'erreur bash 'Too many arguments'. Mon plan suivant était d'utiliser

find ./mystring* -type f

mais le problème est le même.

Le code doit ressembler à quelque chose comme

for FILE in `find ./mystring* -type f`
do
    #Some function on the file
done

301voto

Sergio Tulentsev Points 82783

Utilisation find avec un joker :

find . -name 'mystring*'

29voto

jacanterbury Points 446
ls | grep "^abc"  

vous donnera tous les fichiers début (ce qui est ce que le PO demande spécifiquement) avec la sous-chaîne abc .
Il n'opère que sur le répertoire courant alors que find opère de manière récursive dans les sous-dossiers.

Pour utiliser find pour les seuls fichiers démarrage avec votre chaîne de caractères, essayez

trouver . -nom 'abc'*

7voto

matson kepson Points 426

Si vous souhaitez restreindre votre recherche aux seuls fichiers, vous devriez envisager d'utiliser l'option -type f dans votre recherche

essayer d'utiliser aussi -iname pour une recherche insensible à la casse

Ejemplo:

find /path -iname 'yourstring*' -type f

Vous pouvez également effectuer certaines opérations sur les résultats sans signe de pipe ou xargs

Ejemplo:

Recherche de fichiers et affichage de leur taille en Mo

find /path -iname 'yourstring*' -type f -exec du -sm {} \;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X