Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

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!

share|improve this question
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
    
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 –  Atsch Jul 5 '13 at 10:27

3 Answers 3

up vote 2 down vote accepted

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` 
share|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; }
share|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 :( –  Atsch 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 :( –  Atsch 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.

share|improve this answer
2  
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

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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