Et si nous laissions find gérer les noms de fichiers ?
find . -maxdepth 1 -iname '*syed*' -exec du -ch {} +
Et ça ? :
find . -maxdepth 1 -iname '*syed*' -print0 | xargs -0 du -ch
Explication des options :
find– Ce que vous utilisiez pour trouver des fichiers-print0– Divisez chaque résultat avec un caractère nul, qui est un caractère qui ne peut pas apparaître dans un nom de fichier
xargs– Assemble les arguments d'une commande canalisée depuis l'entrée standard (stdin)-0– Recevoir chaque argument divisé par un caractère nuldu -ch– La commande à laquelle vous souhaitez passer les arguments du fichier
Quant à savoir pourquoi votre sed proposé le moyen de s'échapper ne fonctionne pas, le \ les caractères que vous essayez d'ajouter sont placés après le délimiteur d'argument du shell (" ") l'échappement a déjà eu lieu. Chaque mot, délimité par un espace, est déjà un argument.
Ma solution avec xargs garantit que chaque argument est un chemin de find , sans tenir compte des espaces.