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, pouvant correspondre à des dizaines de milliers de fichiers.
J'ai essayé
ls mystring*
mais cela retourne 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
Merci d'avance, Rik
utilisation
find . -name 'mystring*'
ls | grep "^a"
vous donnera tous les fichiers commençant par la lettre a et ne fonctionne que sur le répertoire courant alors que find explorera les sous-répertoires par défaut.
Je ne dis pas que c'est mieux - juste un angle différent.
Si vous souhaitez limiter votre recherche aux fichiers, utilisez plutôt -type f
dans votre recherche.
essayez également d'utiliser -iname
pour la recherche non sensible à la casse
Exemple:
find /path -iname 'yourstring*' -type f
Vous pouvez également effectuer certaines opérations sur les résultats sans signe de conduite ni xargs.
Exemple:
Rechercher des fichiers et afficher leur taille en Mo
find /path -iname 'yourstring*' -type f -exec du -sm {} \;