I am writing a .sh to do some work for me, but I am now at the point where I have to cd to the directory the file /path/to/file.end is in. terminal doesn't allow

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

there is sadly no workaround I know of, so it would be nice if you could help!

  • 4
    Um, do you mean cd /path/to? That will change the directory to the directory that the file file.end is in. – Alaa Ali Jul 5 '13 at 9:56
  • 1
    No, the file is variable, and I would like to enter the path of the file (drop it into the terminal) and then go to the folder it is in – Azsgy Jul 5 '13 at 10:27

Type cd $( dirname /path/to/file.end). That will take you into /path/to.


  • dirname returns the complete path for a file (without the filename, which you would get with basename) - i.e. dirname /etc/apt/apt.conf.d/99update-notifier returns /etc/apt/apt.conf.d
  • the expression $(anything) is replaced by the result of the command in the parentheses. So cd $( dirname /etc/apt/apt.conf.d/99update-notifier) is executed as cd /etc/apt/apt.conf.d

Another (but old and discouraged) notation for the same was

cd `dirname /path/to/file.end` 
| improve this answer | |

You can not cd into a file. Here is a (command line) function that will automatically cd into a path for a given fully qualified file path:

function fcd () { [ -f "$1" ] && { cd "$(dirname "$1")"; } || { cd "$1"; } ; pwd; }
| improve this answer | |
  • Did I get this right?: function fcd () { [ -f $1 ] && { cd $(/file.end $1); } || { cd $1 ; } pwd } the response is: bash: syntax error near unexpected token `pwd' it gives me an error this way :( – Azsgy Jul 5 '13 at 10:30
  • 2
    @Atsch, need a semicolon before pwd, and if you're defining a function in one line, need a semicolon after pwd. – glenn jackman Jul 5 '13 at 10:36
  • @glennjackman the function just exits without any output or change of dir :( – Azsgy Jul 5 '13 at 10:43
  • run the function, then enter echo $? -- what is the exit status? – glenn jackman Jul 5 '13 at 11:07
  • darn I should have not doubted myself. The alternative looked better to me when I found it _O- – Rinzwind Jul 5 '13 at 11:11

If you append "/.." to the filename that will take you to the correct directory e.g. cd /path/to/file.end/... It works on Cygwin anyway.

| improve this answer | |
  • 4
    Does not work in bash ;) touch test && cd /home/test/test/.. says bash: cd: /home/test/test/..: No such file or directory – Rinzwind Jul 5 '13 at 14:41

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.