Celeb Glow
news | March 29, 2026

Going to the parent directory of a file with cd?

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!

2

3 Answers

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

Explanation:

  • 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` 

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; }
7

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

2

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

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