簡體   English   中英

在linux中上幾個目錄

[英]Go up several directories in linux

當我想向上移動一個目錄時,我使用

cd ..

但是,當我想要向上 7 個目錄時,除了鍵入七 (7) 次cd ..之外,還有什么方法可以做到這一點?

cd ../../../../../../../

另一個有用的導航提示是,例如,假設您一直從一個目錄(稱為 A)切換到另一個(稱為 B),在您的情況下,它有 7 個目錄。

所以如果你在目錄 A 中:

A> cd ../../../../../../../
B> // Now you're in directory B and want to go back to A
B> cd -

這將立即移回目錄 A。 -擴展到您所在的上一個目錄。

制作別名(在你 ~/.bashrc 中)

function cd_up() {
  cd $(printf "%0.0s../" $(seq 1 $1));
}
alias 'cd..'='cd_up'

並使用:

$ cd.. 7

UPD:或者制作更強大的變體,cd 到當前路徑中的目錄名稱:

# cd up to n dirs
# using:  cd.. 10   cd.. dir
function cd_up() {
  case $1 in
    *[!0-9]*)                                          # if no a number
      cd $( pwd | sed -r "s|(.*/$1[^/]*/).*|\1|" )     # search dir_name in current path, if found - cd to it
      ;;                                               # if not found - not cd
    *)
      cd $(printf "%0.0s../" $(seq 1 $1));             # cd ../../../../  (N dirs)
    ;;
  esac
}
alias 'cd..'='cd_up'                                # can not name function 'cd..'

采用:

$ cd /home/user/documents/projects/reports/2014-10-01
$ cd.. doc
$ pwd
> /home/user/documents

你可以使用pushd . 記住一個目錄,然后popd回到它。

如果有一個我經常使用的命令,我只會創建一個別名。

你可以輸入

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

然后你可以使用..上一級,然后使用...上兩級。

這是我發現的一個小改進:

通常,當您使用 cd .. 返回一個目錄時,您最終會在之后前進一個目錄。 為了使這項工作,您必須使用函數而不是別名,而不是:

alias ..=”cd ../”
alias ..2=”cd ../../”

您可以使用:

..()
{
cd ../$@
}
..2()
{
cd ../../$@
}

但是,在使用此功能后,您很快就會發現您缺少此功能的命令完成功能,從而使其變得不那么有用。 因此,我回去為這個函數添加了我自己的 bash 完成函數,如果你想避免,它可以粘貼到你的 ~/.bashrc 或從你的 ~/.bashrc 調用的任何文件(例如 ~/.bash_completion)中雜亂。 這是完成代碼:

_..()
{
local cur=../${COMP_WORDS[COMP_CWORD]}
COMPREPLY=( $(compgen -d — $cur) )
local i=${#COMPREPLY[*]}
while [ $((--i)) -ge 0 ]; do
COMPREPLY[$i]=$(echo ${COMPREPLY[$i]} | sed -r ‘s/(\.\.\/)*//’)
done
}
complete -F _.. -o nospace -S / ..

_..2()
{
local cur=../../${COMP_WORDS[COMP_CWORD]}
COMPREPLY=( $(compgen -d — $cur) )
local i=${#COMPREPLY[*]}
while [ $((--i)) -ge 0 ]; do
COMPREPLY[$i]=$(echo ${COMPREPLY[$i]} | sed -r ‘s/(\.\.\/)*//’)
done
}
complete -F _..2 -o nospace -S / ..2

不記得我從哪里復制了這個函數,但它對我很有用(例如,你可以放入.bashrc文件)

up() { local p= i=${1:-1}; while (( i-- )); do p+=../; done; cd "$p$2" && pwd; }

例如,要向上移動 7 個目錄,則需要up 7

你可以這樣做cd ../../../../../../../

有一篇很酷的文章介紹了一些可用於改進導航的技巧。

for i in {1..7}; do cd ..; done

嗯,我不這么認為。

但是你可以寫cd ../../../.. (等等)而不是 7 次 cd ..

您可以將以下函數添加到您的.bashrc

# ~/.bashrc
up() {
  for D in $(seq 1 $1);
     do 
       cd ..
     done
}

所以用法很簡單:

user ~ $ up 3
user / $

這個漂亮的功能支持雙向上升。

如果您在/a/b/c/d 中,則 'up 1' 將帶您到/a/b/c ,依此類推。 那是非常標准的,並且涵蓋在大多數其他答案中。

現在,對於特殊部分; 使用負數會讓你從另一個方向上升。 因此,如果您在/a/b/c/d 中,'up -1' 將帶您到/a ,依此類推。

function up() {
    UP=$1

    if [[ $UP =~ ^[\-0-9]+$ ]]; then
        if ((UP<0)); then
            UP=${UP#-}
            cd $(echo $PWD | cut -d/ -f1-$((UP+1)))
        else
            cd $(printf "%0.s../" $(seq 1 ${UP}));
        fi
    fi
}

可在github上下載/安裝。

對於魚類用戶,

function cdd
   for x in (seq $argv)
     cd ..
   end
end

並將其保存到您的:~/.config/fish/functions/cdd.fish

只需$ cdd 3就可以上 3 個目錄。

我制作了一個小實用程序,可以更輕松地導航深層目錄結構: https : //github.com/ianatha/up

安裝up ,您可以:

$ pwd
/Users/jdoe/Developer/backend/src/main/java/com/example/service/db/
$ up example
$ pwd
/Users/jdoe/Developer/backend/src/main/java/com/example/
$ up 4
$ pwd
/Users/jdoe/Developer/backend/src/

你可以試試這個解決方案。 這對我來說很好用:

 #!/bin/bash #this sctipt should take one parameter - number of steps. And do "cd" command step times. # example usage: cd `cde 3` NEW_PATH=$(pwd) step="../" upper="" for i in seq $1 do upper="$upper$step" done echo $upper

我在 ~/.barsh 文件中創建了別名。 這對我來說很好用。
例如,最多三個文件夾。
$cd `cde 3`

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM