获取文件参数并移动到该目录?

获取文件参数并移动到该目录?

是否有 Unix 命令或 shell 脚本接受文件参数并移动到包含的目录,完全忽略参数的文件部分?

答案1

您可以创建一个函数,如下所示:

cd_to_file_location() {                          
    location=$(dirname -- "$1")
    cd -- "$location"
}

# test it out
$ mkdir /tmp/foodir
$ touch /tmp/foodir/a
$ cd_to_file_location /tmp/foodir/a 
$ pwd
/tmp/foodir

答案2

zsh

cdparent() cd -- $1:h

将定义一个cdparent函数,将当前工作目录更改为h第一个参数的目录部分 (ead)。

您还可以这样做:

cd some/file(:h)

这里:h再次在 glob 限定符中使用来检索给定文件的头部。

:h修饰符来自 70 年代的 csh,可用于参数扩展和历史替换。在 中zsh,它可以应用于那些加上全局限定符的情况。在 中bash,它只能应用于历史替换。其中一些修饰符(包括:h)也可以在 中使用vim,例如,您可以:cd %:h在其中 chdir 到当前编辑的文件的目录中。

(这家长上面的措辞可能会有点误导cdparent ..,例如,这将执行 acd .而不是 a cd ../..as家长可以建议)。

答案3

您可以使用一个函数来检查目标路径是否是目录,如果不是,它将从路径中获取目录名称并 cd 到该目录。例如:

mycd()
{
    if [ ! $# -eq 1 ]
    then
        printf "Usage: mycd <PATH>\n" >&2
        return
    fi

    if [ ! -d "$1" ]
    then
        dest="$(dirname -- "$1")"
        set -- "$dest"
    fi

    cd -- "$1"
}

它具有足够的通用性,可以处理目录和文件路径,并且由于它使用 real,因此cd您始终可以使用以下命令返回到上一个目录cd -

$ mkdir /tmp/test-dir/
$ touch /tmp/test-dir/FILE
$ mycd /tmp/test-dir/FILE
$ pwd
/tmp/test-dir
$ mycd /tmp/
$ pwd
/tmp
$ cd -
/tmp/test-dir
$ pwd
/tmp/test-dir

答案4

你在找吗?

cd "${dirname "$1"}"

您也可以根据需要使用pushd代替。cd

相关内容