chdir au répertoire avec des espaces

Je lance la commande suivante:

cd $(find /tmp/my_temp/ -type d -wholename '/tmp/my_temp/MyNumb-*_WeCo - MX') 

Il renvoie quelque chose comme ceci:

 /tmp/nolio_temp/MyNumb-15_WeCo - MX 

En essayant de cd à cette sortie, je ne peux pas parce qu’il y a des espaces.

Existe-t-il un moyen de cd le répertoire renvoyé par find même s’il existe des espaces?

Il suffit de le citer et cela fonctionnera:

 cd "$()" 

Dans ton cas:

 cd "$(find /tmp/my_temp/ -type d -wholename '/tmp/my_temp/MyNumb-*_WeCo - MX')" 

De cette façon, vous indiquez à cd d’utiliser comme argument ce qu’il y a entre les guillemets.

C’est une bouchée, mais ce qui suit est extra paranoïaque en termes de travail correct dans les cas de coins impairs:

 IFS= read -r -d '' dirname \ < <(find /tmp/my_temp/ -type d -wholename '/tmp/my_temp/MyNumb-*_WeCo - MX' -print0) cd "$dirname" 

Cela gérera les noms de fichiers se terminant par des espaces, les noms de fichiers contenant des nouvelles lignes (y compris les nouvelles lignes de fin, que $() va manger), les cas où find ne renvoie qu'un résultat, et d’autres impairs.

Dans un commentaire à la réponse de fedorqui , vous avez écrit que vous souhaitez éviter d’utiliser des guillemets doubles dans votre commande. Je suis curieux de savoir pourquoi, mais vous pouvez le faire, au moins, avec

 eval 'cd '$(find /tmp/nolio_temp -type d \ -wholename '/tmp/nolio_temp/MyNumb-*_WeCo - MX' | sed -e 's/ /\\ /g') 

Mais faites très attention aux noms de fichiers malveillants.