La réponse de Dick.Guertin [1], qui suggère d'échapper aux espaces dans un nom de fichier, est une alternative intéressante aux autres solutions proposées ici (comme l'utilisation d'un caractère nul comme séparateur plutôt qu'un espace). Mais cela pourrait être plus simple - vous n'avez pas vraiment besoin d'un caractère unique. Vous pouvez simplement demander à sed d'ajouter directement les espaces échappés :
ls | grep ' ' | sed 's| |\\ |g' | xargs ...
De plus, le grep n'est nécessaire que si vous uniquement veulent des fichiers avec des espaces dans les noms. De manière plus générale (par exemple, lors du traitement d'un lot de fichiers dont certains ont des espaces, d'autres non), il suffit de sauter le grep :
ls | sed 's| |\\ |g' | xargs ...
Ensuite, bien sûr, le nom du fichier peut comporter d'autres espaces que les blancs (par exemple, une tabulation) :
ls | sed -r 's|[[:blank:]]|\\\1|g' | xargs ...
Cela suppose que vous avez un sed qui supporte -r (regex étendu) comme GNU sed ou les versions récentes de bsd sed (e.g., FreeBSD qui épelait à l'origine l'option "-E" avant FreeBSD 8 et supporte à la fois -r & -E pour la compatibilité jusqu'à FreeBSD 11 au moins). Sinon, vous pouvez utiliser une expression entre crochets de classe de caractères regex de base et entrer manuellement les caractères espace et tabulation dans le champ []
délimiteurs.
[1] Il serait peut-être plus approprié de commenter ou de modifier cette réponse, mais pour l'instant je n'ai pas assez de réputation pour commenter et je ne peux que suggérer des modifications. Puisque les dernières formes ci-dessus (sans le grep) modifient le comportement de la réponse originale de Dick.Guertin, une édition directe n'est peut-être pas appropriée de toute façon.
0 votes
Au lieu de
ls |grep mp3 |sed -n "7p"
vous pouvez simplement utiliserecho "Lemon Tree.mp3"
.1 votes
Duplicata possible de Comment puis-je utiliser xargs pour copier des fichiers dont le nom comporte des espaces et des guillemets ?
0 votes
Cette question trouve également une réponse dans stackoverflow.com/a/33528111/94687