我正在运行以下命令:
cd $(find /tmp/my_temp/ -type d -wholename '/tmp/my_temp/MyNumb-*_WeCo - MX')
它返回的内容如下:
/tmp/nolio_temp/MyNumb-15_WeCo - MX
当尝试cd
到这个输出时,我不能,因为有空格。
即使存在空格,是否有cd
到find
返回的目录的任何方法?
答案 0 :(得分:2)
只需引用它就可以了:
cd "$()"
在你的情况下:
cd "$(find /tmp/my_temp/ -type d -wholename '/tmp/my_temp/MyNumb-*_WeCo - MX')"
这样你就可以告诉cd
使用双引号内的参数作为参数。
答案 1 :(得分:1)
这是一个满口的,但在奇怪的角落案件中正确工作方面,以下是额外的偏执:
IFS= read -r -d '' dirname \
< <(find /tmp/my_temp/ -type d -wholename '/tmp/my_temp/MyNumb-*_WeCo - MX' -print0)
cd "$dirname"
这将处理以空格结尾的文件名,包含换行符的文件名(包括$()
会吃掉的尾随换行符),find
仅返回一个结果的情况,以及其他此类古怪的数据。
答案 2 :(得分:0)
在对fedorqui’s answer的评论中,您写道,您希望避免在命令中使用双引号。我很想知道为什么,但你可以在bash
至少使用
eval 'cd '$(find /tmp/nolio_temp -type d \
-wholename '/tmp/nolio_temp/MyNumb-*_WeCo - MX' |
sed -e 's/ /\\ /g')
但是要非常小心恶意文件名。