用cd转到文件的父目录?


9

我正在编写.sh来为我做一些工作,但是现在我必须将cd cd到文件/path/to/file.end所在的目录中。终端不允许

cd /path/to/file.end
bash: cd: /path/to/file.end: Not a directory

很遗憾,我没有解决方法,如果您能提供帮助,那就太好了!


4
嗯,你的意思是cd /path/to?这将是该文件的目录切换到该目录file.end是英寸
阿拉·阿里

1
不,文件是可变的,我想输入文件的路径(将其放入终端),然后转到它所在的文件夹
Azsgy 2013年

Answers:


10

输入cd $( dirname /path/to/file.end)。那将带您进入/path/to

说明:

  • dirname返回文件的完整路径(不带文件名,您将获得basename)-即dirname /etc/apt/apt.conf.d/99update-notifier返回/etc/apt/apt.conf.d
  • 表达式$(anything)将替换为括号中命令的结果。因此cd $( dirname /etc/apt/apt.conf.d/99update-notifier)执行为cd /etc/apt/apt.conf.d

另一个(但过时且不鼓励的)表示法是

cd `dirname /path/to/file.end` 

8

您不能cd放入文件。这是一个(命令行)函数,它将自动cd进入给定完全限定文件路径的路径:

function fcd () { [ -f "$1" ] && { cd "$(dirname "$1")"; } || { cd "$1"; } ; pwd; }

我说对了吗?:function fcd(){[-f $ 1] && {cd $(/ file.end $ 1); } || {cd $ 1; } pwd}响应是:bash:意外令牌'pwd'附近的语法错误它给我这样的错误:(
Azsgy 2013年

2
@Atsch,在前面需要分号pwd,如果要在一行中定义函数,则在之后需要分号pwd
glenn jackman

@glennjackman该函数仅在没有任何输出或dir更改的情况下退出:(
Azsgy 2013年

运行该功能,然后输入echo $?-退出状态是什么?
glenn jackman

该死的,我不应该怀疑自己。当我找到它时,替代方案对我来说看起来更好_O-
Rinzwind 2013年

1

如果在文件名后附加“ / ..”,将把您带到正确的目录,例如cd /path/to/file.end/..。无论如何,它都能在Cygwin上运行。


4
不适用于bash;)touch test && cd /home/test/test/..bash: cd: /home/test/test/..: No such file or directory
Rinzwind
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.