当前位置:  开发笔记 > 编程语言 > 正文

如何在Bash中管理长路径?

如何解决《如何在Bash中管理长路径?》经验,为你挑选了4个好方法。

我有一个管理长路径的问题.我怎样才能快速到达像这样的道路

/Users/User/.../.../.../.../.../Dev/C/card.c

我尝试了一个别名

alias cd C='cd /Users/User/.../.../.../.../.../Dev/C'

但我无法为两个单独的单词做别名.我在CDPATH中列出了很长的Bash别名和路径列表,所以我在犹豫是否要更多.如何管理长途径?

[回复的想法]

用户litb的回复揭示了我在管理中遇到的一些问题.诸如"CTRL + R","! - 3:1:2:4:x"和"增量搜索"之类的东西对我来说很难.它们可能有助于导航长目录,从某种意义上说,管理.



1> lhunath..:

使用符号链接可能是最好的主意; 但是你可以比将它们全部转储到你的主目录更容易.

正如你所提到的,BASH有一个名为CDPATH的功能,在这里非常方便.

只需在homedir中创建一个隐藏文件夹(这样就不会使你的homedir太乱了):

$ mkdir ~/.paths
$ cd ~/.paths
$ ln -s /my/very/long/path/name/to/my/project project
$ ln -s /some/other/very/long/path/to/my/backups backups
$ echo 'CDPATH=~/.paths' >> ~/.bashrc
$ source ~/.bashrc

这将在homedir中创建一个名为".paths"的目录,其中包含您经常使用的所有长目录位置的符号链接,然后将CDPATH bash变量设置为该目录(在.bashrc中)并重新读取.bashrc文件.

现在,您可以从任何地方前往任何这些路径:

$ cd project
$ cd backups

给你一个简短的CDPATH,没有混乱的别名,更重要的是:一个非常简单的方法从其他应用程序(如UI应用程序)导航到那些长路径,只需进入〜/ .paths或将该目录添加到UI应用程序中侧边栏左右.

可能是您可以拥有的最简单的全方位解决方案.



2> Juliano..:

考虑使用符号链接.我有一个~/work/目录,我将符号链接放在我当前的所有项目中.

您也可以使用shell变量:

c='/Users/User/.../.../.../.../.../Dev/C'

然后:

cd "$c"



3> Dan Breslau..:

在主目录(或您选择的其他位置)中创建符号链接

ln -s longDirectoryPath~/MySymLinkName

有关man ln详细信息,请参阅



4> paxdiablo..:

可能最简单的解决方案是使用:

alias cdc='cd /Users/User/.../.../.../.../.../Dev/C'
alias cdbin='cd /Users/User/.../.../.../.../.../Dev/bin'
alias cdtst='cd /Users/User/.../.../.../.../.../Dev/tst'

如果你一次只是在一个项目上工作.如果您处理多个项目,则可以使用另一个别名来更改上述别名中的目录.

所以,你会使用类似的东西:

proj game17
cdc
make
proj roman_numerals
cdbin
rm -f *
proj game17 ; cdc

由于这是一个有用的东西,我决定整理一系列可以使用的脚本.它们都基于您放置在主目录中的配置文件以及源脚本的别名.该文件"~/.cdx_data"的格式如下:

scrabble:top=~/dev/scrabble
scrabble:src=~/dev/scrabble/src
scrabble:bin=~/dev/scrabble/bin

sudoku:top=~/dev/scrabble
sudoku:src=~/dev/scrabble/src
sudoku:bin=~/dev/scrabble/bin
sudoku:data=~/dev/scrabble/data

并列出所有相关项目(本例中为scrabble和sodoku)及其目录(每个项目可能不同,但在此示例中有top,bin,src和data).

第一个动作是初始化东西,所以放:

. ~/.cdx_init

在.bash_profile的末尾,创建"~/.cdx_init"文件为:

alias cdxl='. ~/.cdx_list'
alias projl='. ~/.cdx_projlist'
alias cdx='. ~/.cdx_goto'
alias proj='. ~/.cdx_proj'

这将设置四个别名以获取我将在下面包含的文件.用法是:

cdxl     - List all directories in current project.

projl    - List all projects.

proj     - Show current project.
proj 

- Set current project to

(if allowed). cdx - Show current project/directory and expected/actual real directory, since they can get out of sync if you mix cd and cdx. cdx . - Set actual real directory to expected directory (in other words, get them back into sync). cdx - Set directory to (if allowed).

实际的脚本如下.首先,".cdx_list"它只列出当前项目中允许的目录(为了便于阅读,管道分为多行,但它们都应该在一行上).

echo "Possible directories are:"
cat ~/.cdx_data
    | grep "^${CDX_PROJ}:"
    | sed -e 's/^.*://' -e 's/=.*$//'
    | sort -u
    | sed 's/^/    /'

同样,".cdx_projlist"显示所有可能的项目:

echo "Possible projects are:"
cat ~/.cdx_data
    | grep ':'
    | sed 's/:.*$//'
    | sort -u
    | sed 's/^/    /'

在多肉的脚本中,".cdx_proj"设置和/或显示当前项目:

if [[ "$1" != "" ]] ; then
    grep "^$1:" ~/.cdx_data >/dev/null 2>&1
    if [[ $? != 0 ]] ; then
        echo "No project name '$1'."
        projl
    else
        export CDX_PROJ="$1"
    fi
fi
echo "Current project is: [${CDX_PROJ}]"

并且".cdx_goto"对于项目中的目录是相同的:

if [[ "$1" == "." ]] ; then
    CDX_TMP="${CDX_DIR}"
else
    CDX_TMP="$1"
fi
if [[ "${CDX_TMP}" != "" ]] ; then
    grep "^${CDX_PROJ}:${CDX_TMP}=" ~/.cdx_data >/dev/null 2>&1
    if [[ $? != 0 ]] ; then
            echo "No directory name '${CDX_TMP}' for project '${CDX_PROJ}'."
            cdxl
    else
            export CDX_DIR="${CDX_TMP}"
            cd $(grep "^${CDX_PROJ}:${CDX_DIR}=" ~/.cdx_data
                | sed 's/^.*=//'
                | head -1
                | sed "s:^~:$HOME:")
    fi
fi
CDX_TMP=$(grep "^${CDX_PROJ}:${CDX_DIR}=" ~/.cdx_data
    | sed 's/^.*=//'
    | head -1
    | sed "s:^~:$HOME:")
echo "Current project   is: [${CDX_PROJ}]"
echo "Current directory is: [${CDX_DIR}]"
echo "                      [${CDX_TMP}]"
echo "Actual  directory is: [${PWD}]"
unset CDX_TMP

它采用留作自己使用三个环境变量:"CDX_PROJ","CDX_DIR""CDX_TMP".除了那些以及上述文件和别名之外,没有使用其他资源.这是我能想到的最简单但最具适应性的解决方案.祝你好运.

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有