chdir到带空格的目录

时间:2015-03-06 21:14:45

标签: linux unix find cd

我正在运行以下命令:

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

它返回的内容如下:

/tmp/nolio_temp/MyNumb-15_WeCo - MX

当尝试cd到这个输出时,我不能,因为有空格。

即使存在空格,是否有cdfind返回的目录的任何方法?

3 个答案:

答案 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')

但是要非常小心恶意文件名。