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.