我正在运行以下命令:
cd $(find /tmp/my_temp/ -type d -wholename '/tmp/my_temp/MyNumb-*_WeCo - MX')它返回如下内容:
/tmp/nolio_temp/MyNumb-15_WeCo - MX当尝试cd到这个输出时,我不能,因为有空格。
有没有办法在存在空格的情况下对find返回的目录执行cd操作?
发布于 2015-03-07 05:16:53
只需引用它,它就会起作用:
cd "$()"在您的案例中:
cd "$(find /tmp/my_temp/ -type d -wholename '/tmp/my_temp/MyNumb-*_WeCo - MX')"这样,您就可以告诉cd使用双引号内的内容作为参数。
发布于 2015-03-07 06:36:21
这很冗长,但以下是在奇怪的角落情况下正确工作的额外偏执:
IFS= read -r -d '' dirname \
< <(find /tmp/my_temp/ -type d -wholename '/tmp/my_temp/MyNumb-*_WeCo - MX' -print0)
cd "$dirname"这将处理以空格结尾的文件名、包含换行符的文件名(包括$()将吃掉的尾随换行符)、find仅返回一个结果的情况,以及其他类似的奇怪情况。
发布于 2015-03-07 06:41:14
在给fedorqui’s answer的评论中,您写道,您希望避免在命令中使用双引号。我很想知道为什么,但您可以这样做,至少在bash中是这样
eval 'cd '$(find /tmp/nolio_temp -type d \
-wholename '/tmp/nolio_temp/MyNumb-*_WeCo - MX' |
sed -e 's/ /\\ /g')但是要非常小心恶意的文件名。
https://stackoverflow.com/questions/28907783
复制相似问题