Trouver tous les fichiers avec un nom de fichier commençant par une chaîne spécifiée?

149

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

j'ai essayé

ls mystring*

mais cela revient avec l'erreur bash «Trop d'arguments». Mon prochain plan était d'utiliser

find ./mystring* -type f

mais cela a le même problème.

Le code doit ressembler à quelque chose comme

for FILE in `find ./mystring* -type f`
do
    #Some function on the file
done
RikSaunderson
la source
Au lieu d'une forboucle, vous devez vous diriger findvers while.
Suspendu jusqu'à nouvel ordre.

Réponses:

277

utilisation

find . -name 'mystring*'
Sergio Tulentsev
la source
10
et pour exécuter une fonction "find. -name 'mystring *' -exec [commande]" par exemple, supprimez "find. -name 'mystring *' -exec rm {} \;"
Eldar
2
Où {} est un espace réservé pour le nom de fichier :-) (afin que vous puissiez
créer
1
Cela semble renvoyer tous les résultats contenant la chaîne? Le
Brian Z
7
... ou find . -iname 'mystring*'pour une recherche insensible à la casse.
Frank Nocke
OP fait référence à un seul répertoire donc insérez -maxdepth 1avant la recherche -namede limite au dossier actuel
jacanterbury
27
ls | grep "^abc"  

vous donnera tous les fichiers commençant (ce qui est spécifiquement requis par l'OP) par la sous-chaîne abc.
Il ne fonctionne que sur le répertoire courant alors qu'il findfonctionne de manière récursive dans les sous-dossiers.

À utiliser finduniquement pour les fichiers commençant par votre chaîne, essayez

trouver . -nom 'abc' *

Jacanterbury
la source
4

Si vous souhaitez limiter votre recherche uniquement aux fichiers, vous devez envisager d'utiliser -type fdans votre recherche

essayez de l'utiliser également -inamepour la recherche insensible à la casse

Exemple:

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

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

Exemple:

Rechercher des fichiers et afficher leur taille en Mo

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