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.