Điều hướng thư mục nhanh trong shell bash


119

Tôi muốn thường xuyên chuyển đổi giữa các thư mục trong các đường dẫn hoàn toàn không liên quan, ví dụ /Project/Warnest/docs/~/Dropbox/Projects/ds/test/.

Nhưng tôi không muốn gõ cd /[full-path]/mọi lúc. Có bất kỳ lệnh tắt để chuyển sang thư mục làm việc trước đây?

Một giải pháp tôi có thể nghĩ đến là thêm các biến môi trường vào bash .profilecác thư mục được sử dụng thường xuyên và cdsử dụng các biến đó.

Nhưng có giải pháp nào khác cho việc này không?


Liên kết tượng trưng cũng có thể hữu ích cho việc này. vi.wikipedia.org/wiki/ từ
user606723

Câu trả lời:


135

Nếu bạn chỉ chuyển đổi giữa hai thư mục, bạn có thể sử dụng cd -để quay lại.


13
Làm thế nào điều này đã trốn tránh tôi quá lâu là một bí ẩn. Cảm ơn bạn rất nhiều cho mẹo tuyệt vời này.
Ông Shickadance

3
+1 Chắc chắn là một trong những mục yêu thích của tôi và một trong những điều mà nhiều chuyên gia đã 'bỏ lỡ'.
Michael Durrant

62

Có một biến vỏ CDPATHtrong bashkshcdpathtrong zsh:

CDPATH    The search path for the cd command. This is a colon-separated
          list of directories in which the shell looks for destination
          directories specified by the cd command.

Vì vậy, bạn có thể đặt trong ~ / .bashrc:

export CDPATH=/Project/Warnest:~/Dropbox/Projects/ds

Sau đó cd docscd testsẽ đưa bạn đến thư mục đầu tiên được tìm thấy như vậy. (Ý tôi là, ngay cả khi một thư mục có cùng tên sẽ tồn tại trong thư mục hiện tại, CDPATHvẫn sẽ được hỏi ý kiến. Nếu CDPATHsẽ chứa nhiều thư mục có thư mục con với tên đã cho, thì thư mục đầu tiên sẽ được sử dụng.)


16
Nó nên được đề cập rằng nói chung, bạn sẽ muốn mục đầu tiên trong $CDPATHđược .(một mục một cách rõ ràng, tức là :cũng làm việc). Nếu không, bạn sẽ kết thúc với hành vi kỳ quặc trong đó các thư mục CDPATHđược ưu tiên hơn các thư mục trong thư mục làm việc hiện tại, điều mà bạn có thể không muốn.
jw013

4
Tôi làm khá nhiều điều tương tự, nhưng không có export. Theo cách đó, CDPATHkhông được xuất sang các tập lệnh có hiệu ứng kỳ lạ hoặc có hại. Xem ở đây để biết thêm thảo luận và ví dụ.
Telemachus

"Bash và ksh và cdpath trong zsh" ... và trong tcsh (chỉ cần trả lời một câu hỏi dựa trên câu hỏi đó trên Super User và tìm thấy điều này trong khi tìm kiếm câu trả lời tương tự trên SE).
Hennes

Đây là POSIX - được chỉ định, tôi nghĩ vậy. Ít nhất, POSIX để cdchỉ nó.
mikeerv

48

Một cái gì đó khác mà bạn có thể thử là một công cụ gọi là autojump . Nó giữ một cơ sở dữ liệu các cuộc gọi đến bí danh ( jtheo mặc định) và cố gắng đưa ra quyết định thông minh về nơi bạn muốn đến. Ví dụ: nếu bạn thường xuyên gõ:

j ~/Pictures

Bạn có thể sử dụng những điều sau đây để đến đó trong một nhúm:

j Pic

Nó có sẵn của Debian và Ubuntu và được bao gồm trên cơ sở cho mỗi người dùng trong ~/.bashrchoặc ~/.zshrctheo mặc định.


5
Autojump có lẽ là công cụ tốt nhất cho việc này, phải mất một chút thời gian để xây dựng cơ sở dữ liệu của các thư mục thông thường, nhưng một khi tôi nghĩ bạn sẽ thấy rằng bạn không thể sống mà không có nó. Tôi biết mỗi khi tôi ở trên máy tính của người khác, tôi cảm thấy bị tê liệt.
quodlibetor

1
cảm ơn tình yêu công cụ này! Và mặc dù cd -rất hữu ích để biết nếu bạn chưa biết về nó, tôi nghĩ rằng đây là một giải pháp tốt hơn nhiều so với câu trả lời hàng đầu hiện tại.
Người dùng

Cài đặt toàn hệ thống trên những hệ thống nào?
ctrl-alt-delor

1
@richard Nó có sẵn dưới dạng một gói (ví dụ như apt-get install autojumptrong Ubuntu, nhưng cũng có sẵn cho nhiều người khác như tài liệu trên trang của họ) để cài đặt trên toàn hệ thống, nhưng mỗi người dùng cần tải nó vào môi trường shell của họ để có thể ghi đè cd để theo dõi nơi bạn sẽ
nealmcb

Điều quan trọng cần nói là source /usr/share/autojump/autojump.shnên được thêm vào ~ / .bashrc để autojump hoạt động .
Pablo A

39

Nếu đó là một số lượng nhỏ các thư mục, bạn có thể sử dụng pushdđể xoay giữa chúng:

# starting point
$ pwd
/Project/Warnest/docs
# add second dir and change to it
$ pushd ~/Dropbox/Projects/ds/test
~/Dropbox/Projects/ds/test /Project/Warnest/docs
# prove we're in the right place
$ pwd
~/Dropbox/Projects/ds/test
# swap directories
$ pushd
/Project/Warnest/docs ~/Dropbox/Projects/ds/test

Không giống như cd -, bạn có thể sử dụng điều này với hơn hai thư mục


Theo dõi đề xuất của Noach, tôi hiện đang sử dụng điều này:

function pd()
{
    if [[ $# -ge 1 ]];
    then
        choice="$1"
    else
        dirs -v
        echo -n "? "
        read choice
    fi
    if [[ -n $choice ]];
    then
        declare -i cnum="$choice"
        if [[ $cnum != $choice ]];
        then #choice is not numeric
            choice=$(dirs -v | grep $choice | tail -1 | awk '{print $1}')
            cnum="$choice"
            if [[ -z $choice || $cnum != $choice ]];
            then
                echo "$choice not found"
                return
            fi
        fi
        choice="+$choice"
    fi
    pushd $choice
}

sử dụng ví dụ:

# same as pushd +1
$ pd 1

# show a prompt, choose by number
$ pd
 0 ~/Dropbox/Projects/ds/test
 1 /Project/Warnest/docs
 2 /tmp
? 2
/tmp ~/Dropbox/Projects/ds/test /Project/Warnest/docs

# or choose by substring match
$ pd
 0 /tmp
 1 ~/Dropbox/Projects/ds/test
 2 /Project/Warnest/docs
? doc
/Project/Warnest/docs /tmp ~/Dropbox/Projects/ds/test

# substring without prompt
$ pd test
~/Dropbox/Projects/ds/test /Project/Warnest/docs /tmp

v.v ... Rõ ràng đây chỉ là để xoay qua ngăn xếp và không xử lý thêm đường dẫn mới - có lẽ tôi nên đổi tên nó.


6
Ôi, tôi đã biết pushdpopdđể đi qua, nhưng không phải cái xe đẩy đó có thể xoay những gì đã được sử dụng cho đến nay ...
Izkata

14

Tôi sử dụng aliastrong bashrc để làm những CD đó.
nhu la:

alias wdoc='cd ~/Project/Warnest/docs'
alias dstest='cd ~/Dropbox/Projects/ds/test'

bashrc là một tập tin như .profile? trong đó tôi cần thêm những dòng đó?
saiy2k

~/.bashrchoặc /etc/bash.bashrc. Trước đây tôi không sử dụng .profile, vì vậy không biết mối quan hệ giữa họ :-(
Felix Yan

script bashrc sẽ bắt đầu mỗi khi bạn mở terminal. hồ sơ với khởi nghiệp.

đã thêm những dòng này vào của tôi .bash_profilevà nó hoạt động rất tốt .. thx :)
saiy2k

Tôi có một số thư mục dự án cụ thể tôi thường xuyên đến, đây là cách dễ nhất để thiết lập và duy trì chúng. Ngoài ra, đối với tôi, nó dẫn đến số lượng ký tự được nhập ít nhất trong tất cả các giải pháp ở đây. HÔN! :-)
psychboom

11

Tôi đã tìm thấy một tập lệnh (thường được gọi là acd_funch.sh) đã giải quyết vấn đề này cho tôi. Với điều này, bạn có thể gõ cd --để xem 10 thư mục cuối cùng mà bạn đã sử dụng. Nó sẽ trông giống như thế này:

0  ~/Documents/onedir
1  ~/Music/anotherdir
2  ~/Music/thirddir
3  ~/etc/etc

Đi đến ~/Music/thirddirchỉ cần gõcd -2

Người giới thiệu

LƯU Ý: Tập lệnh này ban đầu được xuất bản trong một bài báo về linux có sẵn ở đây: acd_func.sh - mở rộng CD của bash để giữ, hiển thị và truy cập lịch sử của các tên thư mục đã truy cập .


Kịch bản tương tự cũng được xuất bản trong Công báo Linux, Số # 109, tháng 12 năm 2004 .
Serge Stroobandt

@Dean Liên kết đến một video âm nhạc và nói rằng Geocities đã đóng.
vài thứ gì đó

1
@s SomethingS Something Đã thêm liên kết thay thế.
Trưởng khoa

lịch sử | grep cd
user2180794

10

Hãy thử cdable_varstùy chọn shell trong bash. Bạn bật nó lên với shopt -s cdable_vars.

Sau đó, bạn cần phải thiết lập các biến của bạn export dir1=/some/path. và cuối cùng cd dir1, vv Sau đó, bạn có thể đặt nó vào trong của bạn ~/.bashrcđể làm cho nó dính.


10

Sử dụng "Pushd -n " (giả sử bạn sử dụng bash).

Thêm vào ~ / .bashrc của bạn:

pushd -n /Project/Warnest/docs/
pushd -n ~/Dropbox/Projects/ds/test/

sau đó,

cd ~ là nhà của bạn,

cd ~1~/Dropbox/Projects/ds/test/

cd ~2/Project/Warnest/docs/

Bạn có thể sử dụng ~1, ~2vv theo cách chính xác như ~.


7

Có rất nhiều gợi ý tốt ở đây. Việc sử dụng sẽ phụ thuộc vào việc bạn có một danh sách nhỏ các thư mục mà bạn chuyển đổi hay không, hoặc liệu bạn đang tìm kiếm một giải pháp chung chung hơn.

Nếu đó là một danh sách cố định nhỏ, thiết lập các bí danh đơn giản (như Felix Yan đề xuất) sẽ dễ sử dụng nhất.

Nếu bạn đang tìm kiếm một giải pháp tổng quát hơn (nghĩa là nhiều thư mục khác nhau, thay đổi theo thời gian), tôi sẽ sử dụng Pushd và popd (như Vô dụng đề xuất). Cá nhân tôi thấy Pushd / popd mặc định khó sử dụng, đặc biệt là khi bạn bắt đầu chuyển đổi giữa nhiều thư mục; tuy nhiên tôi đã viết một vài điều chỉnh giúp tôi dễ dàng hơn nhiều. Thêm phần sau vào bashrc của bạn:

alias dirs='dirs -v'
pd () 
{ 
    if [ "$1" ]; then
        pushd "${1/#[0-9]*/+$1}";
    else
        pushd;
    fi > /dev/null
}
  • Sử dụng pd(dưới dạng ngắn hơn pushd) để chuyển đến một thư mục mới, ghi nhớ vị trí của bạn.
  • Sử dụng dirsđể xem danh sách các thư mục đã lưu.
  • Sử dụng pd 3để nhảy đến thư mục số 3.

Cách sử dụng ví dụ:

$ PS1='\w\$ '   ## just for demo purposes
~$ pd ~/Documents/data
~/Documents/data$ pd ../spec
~/Documents/spec$ pd ~/Dropbox/Public/
~/Dropbox/Public$ pd /tmp
/tmp$ pd /etc/defaults/
/etc/defaults$ dirs
 0  /etc/defaults
 1  /tmp
 2  ~/Dropbox/Public
 3  ~/Documents/spec
 4  ~/Documents/data
 5  ~
/etc/defaults$ pd 2
~/Dropbox/Public$ dirs
 0  ~/Dropbox/Public
 1  ~/Documents/spec
 2  ~/Documents/data
 3  ~
 4  /etc/defaults
 5  /tmp
~/Dropbox/Public$ pd 4
/etc/defaults$ dirs
 0  /etc/defaults
 1  /tmp
 2  ~/Dropbox/Public
 3  ~/Documents/spec
 4  ~/Documents/data
 5  ~
/etc/defaults$ pd 3
~/Documents/spec$ popd
~/Documents/data ~ /etc/defaults /tmp ~/Dropbox/Public
~/Documents/data$ 

6

Sau đây có vẻ như hoạt động trên một trường hợp tôi đã thử nghiệm và bạn chỉ có thể thả tên thư mục của mình dưới dạng liên kết tượng trưng trong ~ / Bookmarks:

mkdir "$HOME/Bookmarks"
ln -s /tmp "$HOME/Bookmarks/testdir"

function ccd() { cd $(readlink "$HOME/Bookmarks/$1") ; }

ccd testdir && echo $PWD
# gives /tmp

Hàm ccd () đó cần gõ vào dấu nhắc thiết bị đầu cuối hoặc ở nơi nào khác? bạn có thể giải thích không?
saiy2k

1
@ saiy2k: xin lỗi, vâng. Các functiondòng đi vào .bashrc của bạn (bạn có thể gõ nó trong thiết bị đầu cuối của bạn để kiểm tra, nhưng nó sẽ được đi khi bạn đóng cửa sổ đó), các dòng trước khi thiết lập các trường hợp thử nghiệm của "testdir" trở thành một tên tuổi /tmp, và dòng cuối cùng là thử nghiệm để xem nếu nó hoạt động.
Ulrich Schwarz

6

Bạn có thể làm tồi tệ hơn thử j2 .

Từ README:

Dành nhiều thời gian cd-ing xung quanh một cây thư mục phức tạp?

j theo dõi nơi bạn đã đến và bạn dành bao nhiêu thời gian ở đó, và cung cấp một cách thuận tiện để chuyển đến các thư mục bạn thực sự sử dụng.

Tôi sử dụng nó rộng rãi và giới thiệu nó.


5

Tôi khuyên bạn nên sử dụng zsh , shell đó hoàn thành TAB rất tốt cho các thư mục, tệp và thậm chí các tùy chọn cho hầu hết các chương trình cli.

Tôi đã sử dụng lớp vỏ đó từ nhiều năm nay và tôi sẽ bỏ lỡ chức năng nếu nó không còn nữa. Viết kịch bản zsh cũng rất thú vị, với một số lượng lớn các lớp lót có thể giúp bạn mỗi ngày.


Không cần phải thay đổi thành zsh để hoàn thành TAB vì bash có tất cả giống nhau. Đối với chức năng khác có thể nhưng không cho điều này.
Peer Stritzinger

1
@PeerStritzinger Bash đã giới thiệu loại chức năng đó trong BASH 4.0, nhưng so với zsh, nó vẫn còn khá xa phía sau. Nói "tất cả giống nhau" chắc chắn là không chính xác.
Polemon

Vâng zsh chắc chắn là übershell nhưng chỉ cần hoàn thành tab thì không cần phải thay đổi (câu hỏi đã được yêu cầu bash). Bên cạnh bash 4.0 đã được giới thiệu khoảng 3 năm trước ...
Peer Stritzinger

5

Theo kinh nghiệm của tôi, việc tăng tốc lớn nhất trong việc điều hướng trong một chiếc vỏ là sử dụng chức năng tìm kiếm lịch sử của nó. Trong Bash, bạn có thể tìm kiếm ngược trong lịch sử các lệnh của mình bằng cách nhấn Ctrl+ Rvà nhập một số mẫu. Mẫu đó sau đó được khớp với các mục trước trong lịch sử của bạn - có thể là cdcác lệnh hoặc các hoạt động khác - và các đề xuất được thực hiện khi bạn nhập. Chỉ cần nhấn enter để chạy lại lệnh được đề xuất. Điều này được gọi reverse-search-historytrong Bash và tôi thích nó. Nó tiết kiệm cho tôi rất nhiều tổ hợp phím và tiết kiệm bộ nhớ trong của tôi.

Đó là một điều tốt vì bạn chỉ phải nhớ một phần nhỏ hơn của một lệnh, như Drophoặc Wađể phân biệt giữa hai mục lịch sử cd ~/Dropbox/Projects/ds/test/cd /Project/Warnest/docs/.


5

Tôi cũng sử dụng các bí danh này (thêm chúng vào ~ / .bashrc):

alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias .....='cd ../../../..'

Nhanh hơn nhiều để đi đến thư mục phía trên với họ (tuy nhiên nó chỉ giải quyết được một nửa điều hướng).


1
Đây là những bí danh hữu ích, nhưng tôi không hoàn toàn chắc chắn rằng chúng sẽ phù hợp với nhu cầu của OP. Bạn có thể xem xét mở rộng câu trả lời của mình để đề xuất cách thức những điều này có thể hữu ích trực tiếp cho vấn đề của OP.
HalosGhost

4

nếu bạn đang sử dụng zsh:

  • bạn không cần phải nhập cd, chỉ cần nhập đường dẫn thư mục ( /foo/bar/baz<Enter>bằng cd /foo/bar/baz<Enter>)

    yêu cầu auto_cdtùy chọn được thiết lập

  • bạn có thể mở rộng các đường dẫn viết tắt bằng Tabkhóa ( /u/sh/pi<Tab>mở rộng thành /usr/share/pixmaps; cũng hoạt động cho tên tệp)

3
Bash 4 đã đạt được shopt -s autocd, vì vậy nó không còn là một điều tốt đẹp nữa.
Gilles

4

Có một công cụ khá hay để thay đổi thư mục nhanh:

xd - eXtra Công cụ thay đổi thư mục nhanh http://xd-home.sourceforge.net/xdman.html

Một chút lúng túng là bạn cần ánh xạ nó trong hồ sơ bash hoặc tương tự vì nó chỉ xuất ra thư mục

# function to do `cd` using `xd`
# -g turns generalized directory search command processing on
# which improves the whole thing a bit
f() 
{
        cd `/usr/bin/xd -g $*`
}

bạn có thể làm những việc như:

# change to /var/log/a* (gives you a list to choose from)    
f vla
# to skip the list and go directly to /var/log/apache2
f vlapach

Thay đổi hàm để f() { cd "$(xd -g "$@")"; }xử lý đúng các thư mục và khoảng cách trong các đối số thành xd(bạn có thể không cần đường dẫn). Nếu bạn không bao giờ sử dụng xdtheo cách khác, bạn có thể thay thế xd() { cd "$(command xd -g "$@")"; }(thay vào đó, sử dụng /usr/bin/xdthay cho command xd- bạn luôn có thể chạy command xd …nếu bạn cần bỏ qua nó).
Adam Katz

4

Bạn không bao giờ nên gõ đường dẫn đầy đủ trong shell. Bạn luôn có thể sử dụng:

soffice /P*/W*/*/mydoc*

thay vì

soffice /Project/Warnest/docs/mydoc.odt

1
Điều này giống như hoàn thành tab, nhưng tệ hơn về mọi mặt
Michael Mrozek

Bạn không thể thực hiện việc này với tab hoàn thành với số lần nhấn phím trừ khi Project chỉ là tệp bắt đầu bằng P, v.v. Ngoài ra, bạn phải đợi hoàn thành mỗi lần, sử dụng * bạn không cần phải chờ.
gena2x

Tôi nghĩ rằng bạn có nó ngược - bạn không thể làm được P*trừ khi Project là tệp duy nhất bắt đầu bằng P. Tab có thể quay vòng (theo mặc định trong hầu hết các shell; bạn cần rebind tab thành menu-completebash) và giải quyết ngay lập tức trong các trường hợp đơn giản như thế này, không phải chờ đợi điều đó
Michael Mrozek

Về 'bạn không thể làm điều đó' - bạn có thể, hãy thử nó, bạn đã mất toàn bộ điểm nếu bạn nghĩ rằng bạn không thể. Hãy thử echo / u * / b * / g ++
gena2x

1
Tôi hiểu ý của bạn là gì, nó nhanh hơn miễn là bạn chắc chắn mình đã gõ một con đường rõ ràng, nhưng một cái gì đó /P*/W*/*/mydoc*nghe có vẻ như sẽ hoạt động tốt cho đến một ngày bạn tình cờ tạo một tệp khác khớp với toàn cầu đó và đột nhiên bạn kết thúc mở cả hai cùng một lúc. /u*/*/g++là một vài ký tự ấn tượng, nhưng hy vọng không có gì khác trong bất kỳ thư mục con nào trong bất kỳ thư mục gốc nào của tôi bắt đầu bằng utên g++. (Như một sự thỏa hiệp tốt đẹp, trong một số hệ vỏ, bạn có thể sử dụng tab để mở rộng các khối tại chỗ khi bạn đi)
Michael Mrozek

3

Ngoài ra OLDPWD, một biến môi trường, theo IEEE 1003.1 (POSIX), nên được cập nhật với thư mục làm việc trước đó mỗi lần cdthay đổi thư mục làm việc (đối với những người tò mò, dòng 80244 của trang 2506 của IEEE 1003.1-2008).


3

Ngoài ra còn có một ứng dụng "wcd" được tạo riêng cho việc này (cũng được chuyển sang cygwin, vì tôi đang ở trên đó). Bạn có thể tạo các phím tắt, đánh dấu các thư mục với nó. Cũng hỗ trợ thẻ hoang dã. Đọc trang man & docs trong / usr / share / wcd sẽ giúp ích rất nhiều.

http://manpages.ubfox.com/manpages/hardy/man7/wcd.7.html


3

cdargs là công cụ hiệu quả nhất để đánh dấu thư mục: http://www.youtube.com/watch?v=uWB2FIQlzZg


Đây có phải là một sản phẩm bạn được liên kết với?
Kazark

Cảm ơn đã chỉ cho tôi để cdargs. Đơn giản chỉ cần sudo apt-get cdargstrên Ubuntu. BTW video youtube thực sự xấu nhưng công cụ này rất tuyệt.
DavidG

3

Hãy thử fastcd ( https://github.com/fraundredhtein/fastcd ) Nó thiết lập hook ghi lại các thư mục đã truy cập từ bash. Và đặt tập lệnh thành bí danh "j", hiển thị cho bạn các thư mục được truy cập cuối cùng, với khả năng nhanh chóng cd (bắt đầu nhập vào bộ lọc thư mục). Cần phải sửa đổi .bashrc để tạo bí danh "j".

Bắt công cụ

cd ~; mkdir Soft; cd Soft
git clone https://github.com/frazenshtein/fastcd

Cài đặt các mô-đun cần thiết

pip install --user urwid

Nguồn tệp set.sh vào bashrc của bạn

echo -e "\nsource /home/$USER/Soft/fastcd/set.sh\n" >> ~/.bashrc

Và cập nhật bashrc

source ~/.bashrc

Sau đó chỉ cần gõ "j" trong bảng điều khiển


Cái này hoạt động ra sao? Nếu đó là bí danh, công cụ này sẽ làm gì cho bạn mà bạn không thể làm bằng cách chỉnh sửa thủ công .bashrc?
G-Man

Nó khởi chạy daemon ghi lại các thư mục đã truy cập trong ~ / .fastcd cho các shell đã khởi chạy (bash). "j" khởi chạy công cụ hiển thị cho bạn các thư mục được truy cập gần đây nhất, với khả năng nhanh chóng cd. Cần phải sửa đổi .bashrc để tạo bí danh "j". Bạn có thể xem mã nguồn để biết thêm thông tin, tôi đoán
Sam Toliman

Cảm ơn cho phản ứng nhanh chóng của bạn. Đây là loại thông tin nên có trong câu trả lời. Vui lòng chỉnh sửa câu trả lời của bạn để bao gồm thông tin này.
G-Man

3

Tôi đã có cùng một câu hỏi, và lần đầu tiên tìm thấy câu trả lời này . Tôi đã cài đặt tiện ích z ( https://github.com/rupa/z ).

Đây chính là những gì bạn tìm kiếm, vì z học từ lệnh cd của bạn, và theo dõi các thư mục theo frecency nguyên tắc (thường xuyên & gần đây). Vì vậy, sau khi bạn thực hiện cả hai lệnh cd một lần, bạn có thể thực hiện một số thao tác như sau:

z docs
z ds

để nhảy tới /Project/Warnest/docs/~/Dropbox/Projects/ds/test/tương ứng. Các đối số cho z là biểu thức chính quy, do đó bạn thậm chí không cần phải nhập tên thư mục đầy đủ.


3

Cập nhật (2016): Bây giờ tôi sử dụng FASD cho việc này, cho phép tìm kiếm mờ dựa trên các thư mục mới nhất của bạn.


Tôi đã tạo một công cụ cho việc này, trong Ruby. Nó cho phép bạn sử dụng các tệp YAML để khai báo các dự án của bạn.

Tôi đã viết một bài viết nhỏ về nó ở đây: http://jrnv.nl/switching-projects-terminal-quickly/

Tôi cũng đã đăng nguồn trên GitHub: https://github.com/jeroenvisser101/project-switcher


2

Tôi đã sử dụng cdhist tiện ích của riêng mình để quản lý việc này trong nhiều năm. Nó bí danh lệnh cd của bạn và tự động giữ một ngăn xếp thư mục.


2

Bạn có thể sử dụng exportđể gán đường dẫn thư mục của mình cho các biến và sau đó tham chiếu chúng.

export dir1=/Project/Warnest/docs/
export dir2= ~/Dropbox/Projects/ds/test/
cd $dir1
cd $dir2

Vâng, điều này là đủ cho một vài dir yêu thích. Không cần phải cài đặt bất kỳ tiện ích khác. Chỉ cần đặt các exporttuyên bố trong của bạn ~/.bashrc, và chúng sẽ luôn luôn có sẵn.
wvducky

1

Một số gợi ý ở đây:

Hầu hết ý tưởng trực tiếp, tôi sẽ thêm bí danh trong tệp .profile

vi ~/.profile
alias dir1='cd /myhome/onedir'
alias dir2='cd /jimmy/anotherdir'

Sau đó sử dụng $ dir1 hoặc dir2, có thể cd

Nếu bạn luôn luôn chuyển đổi trong hai dirs chỉ. sử dụng cd -sẽ chuyển đổi giữa chúng.


1

Giải pháp tôi sử dụng cho tình huống này là screen. Bắt đầu màn hình và tạo một cửa sổ cho mỗi thư mục với C-a cvà điều hướng ở đó. Thay đổi giữa các cửa sổ / thư mục với C-a nhoặc C-a p. Đặt tên cho các cửa sổ với C-a A. Sau đó, bạn có thể bật lên một danh sách các cửa sổ của mình C-a "và điều hướng bằng cách sử dụng số hoặc tên cửa sổ. Vì đó là screen, bạn có thể tách ra khỏi phiên tiết kiệm không gian làm việc của bạn và đính kèm lại sau với cùng một thiết lập.


1

Dường như những gì bạn cần về cơ bản là một tệp dự án cho quy trình công việc của bạn. Với các thư mục thuộc về hoạt động của bạn, như trong IDE lập trình. Hãy thử Zsh Navigation Tools và công cụ n-cdđó. Nó sẽ cho phép bạn điều hướng qua các thư mục được truy cập gần đây nhất và cũng xác định một Hotlistthư mục bạn chọn:

n-cd

n-cd có thể được liên kết với một tổ hợp phím với:

zle -N znt-cd-widget

bindkey "^ T" znt-cd-widget


1

TL; DR

  1. Sử dụng Fishcho vỏ tương tác mà trao quyền cho bạn ngay lập tức ( fish> zsh> bash).
  2. Sử dụng POSIX/ Bashcho kịch bản đó là cú pháp được hỗ trợ rộng rãi nhất ( POSIX> Bash> Zsh> Fish).

Vỏ ốc

Đã thử nghiệm các shell khác nhau ở đây là phản hồi của tôi (theo thứ tự thử nghiệm / áp dụng):

  • Bash:
    • tự động hoàn thành: cơ bản;
    • mở rộng đường dẫn: không;
    • kịch bản: xuất sắc.
  • Zsh+ oh-my-zsh:
    • tự động hoàn thành: tốt (đạp xe qua);
    • mở rộng đường dẫn: có ( cd /e/x1cd /etc/X11/);
    • kịch bản: tốt.
  • Fish+ oh-my-fish(hiện tại) là tốt nhất trong hộp:
    • tự động hoàn thành: tùy chọn gốc và được hỗ trợ;
    • mở rộng đường dẫn: có;
    • kịch bản: quá khác biệt so với tương thích POSIX.

Sử dụng các bí danh có ý nghĩa

Mọi shell có thể được mở rộng bằng cách sử dụng functionaliasđây là những cái tôi sử dụng liên quan đến vấn đề của bạn (tương thích POSIX):

back () {  # go to previous visited directory
        cd - || exit
}

up () {  # go to parent directory
        cd ..|| exit
}

Có những điều cơ bản, nhưng thực sự có ý nghĩa nên dễ nhớ và tự động hoàn thành.

Biết vỏ của bạn

Cấu hình CDPATHđể thêm các thư mục được sử dụng nhất của bạn (ví dụ ~/projects/, /etc/init.d/) để bạn có thể nhanh chóng chuyển cho họ.

Xem câu trả lời manatwork để biết chi tiết mroe trênCDPATH .

Hangout và đọc


Khi một hàm shell gọi exit, bạn thoát khỏi shell tương tác. Những "bí danh có ý nghĩa" đó chỉ có thể alias back='cd -'alias up='cd ..'- nhưng đừng lo lắng, những lệnh đó sẽ không bao giờ trả về false (không có thư mục trước? Nó sẽ gửi bạn về nhà! Đã ở gốc? Đó là một lệnh không!) Và do đó bạn sẽ không bao giờ thoát . Cũng xem xét alias back='cd $OLDPWD'(lưu ý các trích dẫn đơn) vì nó sẽ không có bất kỳ đầu ra nào ( cd -cho bạn biết nơi gửi nó cho bạn, điều này có thể không cần thiết vì lời nhắc của bạn có thông tin đó)
Adam Katz

1

anclà một công cụ dòng cmd (viết tắt của neo), giữ dấu trang của các thư mục. (cho đến nay chỉ được thử nghiệm với bash)

Trong trường hợp của bạn:

anc a /Project/Warnest/docs/ ~/Dropbox/Projects/ds/test/

cái này thêm cả hai thư mục vào danh sách neo (nghĩ bookmark)

bây giờ nếu bạn muốn nhảy đến /Project/Warnest/docs/từ bất cứ đâu trên loại hệ thống của bạn:

anc Warn

và nếu bạn muốn nhảy để ~/Dropbox/Projects/ds/test/gõ:

anc ds test

Ngoài văn bản phù hợp với các đường dẫn được đánh dấu, anc còn có nhiều cách thuận tiện khác để chuyển xung quanh các thư mục.

anc i

bắt đầu chế độ tương tác, liệt kê tất cả dấu trang theo số, vì vậy tất cả những gì bạn phải nhập là số

Nếu bạn gõ:

anc Pro[TAB]

một danh sách khớp với tất cả các dấu trang (trong trường hợp của bạn là cả hai dấu trang) sẽ được hiển thị và bạn có thể chọn từ nó bằng các phím mũi tên của mình, đây là một cách rất nhanh chóng và trực quan.

Nhận anc tại trang github của dự án: https://github.com/tobplesch/anc

Ngoài ra còn có một README với cách sử dụng ví dụ.

Tiết lộ đầy đủ: Tôi là tác giả của kịch bản này. Tôi hy vọng một số người sẽ tìm thấy nó hữu ích.

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.