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
for
boucle, vous devez vous dirigerfind
verswhile
.Réponses:
utilisation
la source
find . -iname 'mystring*'
pour une recherche insensible à la casse.-maxdepth 1
avant la recherche-name
de limite au dossier actuelvous 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
find
fonctionne de manière récursive dans les sous-dossiers.À utiliser
find
uniquement pour les fichiers commençant par votre chaîne, essayezla source
Si vous souhaitez limiter votre recherche uniquement aux fichiers, vous devez envisager d'utiliser
-type f
dans votre rechercheessayez de l'utiliser également
-iname
pour la recherche insensible à la casseExemple:
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
la source