Đi đến thư mục cha của một tập tin với cd?


9

Tôi đang viết một .sh để thực hiện một số công việc cho tôi, nhưng bây giờ tôi đang ở thời điểm mà tôi phải cd vào thư mục tập tin /path/to/file.end đang ở. Terminal không cho phép

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

thật đáng buồn khi tôi không biết cách giải quyết, vì vậy sẽ rất tuyệt nếu bạn có thể giúp đỡ!


4
Ừm, ý bạn là cd /path/tosao? Điều đó sẽ thay đổi thư mục thành thư mục chứa tập tin file.end.
Alaa Ali

1
Không, tệp có thể thay đổi và tôi muốn nhập đường dẫn của tệp (thả tệp vào thiết bị đầu cuối) và sau đó chuyển đến thư mục chứa trong đó
Azsgy

Câu trả lời:


10

Loại cd $( dirname /path/to/file.end). Điều đó sẽ đưa bạn vào /path/to.

Giải trình:

  • dirnametrả về đường dẫn đầy đủ cho một tệp (không có tên tệp mà bạn sẽ nhận được basename) - tức là dirname /etc/apt/apt.conf.d/99update-notifiertrả về/etc/apt/apt.conf.d
  • biểu thức $(anything)được thay thế bằng kết quả của lệnh trong ngoặc đơn. Vì vậy, cd $( dirname /etc/apt/apt.conf.d/99update-notifier)được thực hiện như làcd /etc/apt/apt.conf.d

Một ký hiệu khác (nhưng cũ và chán nản) cho cùng là

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

8

Bạn không thể cdvào một tập tin. Đây là một (command line) chức năng đó sẽ tự động cdvào một con đường cho một đường dẫn tập tin đầy đủ nhất định:

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

Tôi đã hiểu đúng chưa?: Hàm fcd () {[-f $ 1] && {cd $ (/ file.end $ 1); } || {cd $ 1; } pwd} phản hồi là: bash: lỗi cú pháp gần mã thông báo không mong đợi `pwd 'nó gây ra lỗi cho tôi theo cách này :(
Azsgy

2
@Atsch, cần có dấu chấm phẩy trước pwdvà nếu bạn đang xác định hàm trong một dòng, cần dấu chấm phẩy sau pwd.
glenn jackman

@glennjackman chức năng chỉ thoát mà không có bất kỳ đầu ra hoặc thay đổi nào của dir :(
Azsgy

chạy chức năng, sau đó nhập echo $?- trạng thái thoát là gì?
glenn jackman

Tôi không nên nghi ngờ bản thân mình. Sự thay thế có vẻ tốt hơn đối với tôi khi tôi tìm thấy nó _O-
Rinzwind

1

Nếu bạn thêm "/ .." vào tên tệp sẽ đưa bạn đến đúng thư mục, vd cd /path/to/file.end/... Nó hoạt động trên Cygwin nào.


4
Không hoạt động trong bash;) touch test && cd /home/test/test/..nóibash: cd: /home/test/test/..: No such file or directory
Rinzwind
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.