只需键入目录名称即可 cd 吗?

只需键入目录名称即可 cd 吗?

这要么是我 20 年前在某个地方得到的,要么是我梦到的。

基本上:

如果如果输入blobblob我得到
blobblob: command not found

很公平。

我希望这样当我的 shell 收到这些错误时(找不到命令),它会检查是否存在具有该名称(“blobblob”)的目录,如果存在,则指向cd该目录。

我确信有一些原因不这样做或谨慎行事。
我只是认为它会非常整洁,我想通过在某个地方找到方法来尝试一下(比如这里!)。

我不知道如何进行这可能意味着的 shell 编程。

答案1

  • 重击: shopt -s autocd
  • 兹什:setopt autocd
  • tcsh:set implicitcd

此外,“autojump”也是一个有用的工具。安装后,它会记住目录,以便您可以键入 j abc,如果您以前访问过 abc,请说 x/d/f/g/t/abc 那么它会 cd 到那里!
https://github.com/joelthelion/autojump

答案2

自动跳转实用程序提供了类似的机制和最常用的目录列表。然而,它确实需要额外的单调乏味的打字jSpace,但这可以通过经常猜对来弥补。

这是最接近的分布式WIM我已经习惯了。

答案3

这也有效,

cdf name_of_file_or_directory

..假设您设置了一个源自 shell 的自定义 cdf.sh 脚本(如下)。对于作为参数的目录,此脚本仅获取找到的目录的父目录。将以下行添加到您的 .bashrc 或 .zshrc 中,无论如何。

source ~/bin/cdf.sh 

并将此代码添加到您需要从头开始创建的 ~/bin/cdf.sh 文件中。

#!/bin/bash

function cdf() {
    THEFILE=$1
    echo "cd into directory of ${THEFILE}"
    # For Mac, replace find with mdfind to get it a lot faster. And it does not need args ". -name" part.
    THEDIR=$(find . -name ${THEFILE} |head -1 |grep -Eo "/[ /._A-Za-z0-9\-]+/")
    cd ${THEDIR}
}

答案4

把这个放在你的~/.bashrc

  #aliases to cd into the core dirs
  PROJECT_PARENT_DIRS[0]="$HOME/repos"
  #you can make it search more dirs by assigning new indexes to your other root dirs

  for PARENT_DIR in ${PROJECT_PARENT_DIRS[@]} ; do
    if [ -d "$PARENT_DIR" ]; then
      for PROJECT_DIR in $(/bin/ls $PARENT_DIR); do
        if [ ! -z `which $PROJECT_DIR` ]; then
          continue # don't set alias if there is something already a command on the path with the same name
        fi
        if [ -d "$PARENT_DIR/$PROJECT_DIR" ]; then
          alias "$PROJECT_DIR"="cd $PARENT_DIR/$PROJECT_DIR"
        fi
      done
    fi
  done
  #end alias

相关内容