linux cd到包含该文件的文件夹

linux cd到包含该文件的文件夹,linux,terminal,Linux,Terminal,有一个文件路径,我想去文件的目录。完整路径如下所示: /Users/user1/Documents/workspace/project/src/file.py 我想在终端中转到包含此文件的文件夹。 在这种情况下,它将是: /Users/user1/Documents/workspace/project/src/ 现在我必须在终端中粘贴文件,删除文件名并制作cd。比如: cd /Users/user1/Documents/workspace/project/src/ 是否有命令/任何方法可以

有一个文件路径,我想去文件的目录。完整路径如下所示:

/Users/user1/Documents/workspace/project/src/file.py
我想在终端中转到包含此文件的文件夹。 在这种情况下,它将是:

/Users/user1/Documents/workspace/project/src/
现在我必须在终端中粘贴文件,删除文件名并制作cd。比如:

cd /Users/user1/Documents/workspace/project/src/
是否有命令/任何方法可以跳过删除文件并使用智能命令知道它应该转到包含此文件的目录

我每天都要检查很多文件,每次都要从路径中删除文件名,这是一项非常繁琐的任务

所需的操作如下所示:

>>smart_cd /path/to/file.py
>>pwd
/path/to

假设您正在使用Bash:您可以输入
~/.bashrc

function smart_cd() {
    cd "$(dirname $1)"
}
然后:(重新加载.bashrc后)


奖金:您还可以替换
cd
命令来处理普通和智能
cd

function cd() {
    if [ $# -eq 0 ] ; then
        # no arguments
        builtin cd
    elif [ -d $1 ] ; then
        # argument is a directory
        builtin cd "$1"
    else
        # argument is not a directory
        builtin cd "$(dirname $1)"
    fi
}
有关更多信息,请参阅:

  • $#
    man bash中的特殊参数
  • 人工测试
    了解有关
    […-eq…]
    [-d…]

    • 假设您使用的是Bash:您可以将
      ~/.bashrc

      function smart_cd() {
          cd "$(dirname $1)"
      }
      
      然后:(重新加载.bashrc后)


      奖金:您还可以替换
      cd
      命令来处理普通和智能
      cd

      function cd() {
          if [ $# -eq 0 ] ; then
              # no arguments
              builtin cd
          elif [ -d $1 ] ; then
              # argument is a directory
              builtin cd "$1"
          else
              # argument is not a directory
              builtin cd "$(dirname $1)"
          fi
      }
      
      有关更多信息,请参阅:

      • $#
        man bash中的特殊参数
      • 人工测试
        了解有关
        […-eq…]
        [-d…]

      取决于您使用的shell,但在Ubuntu上的bash中,按
      选项卡
      会自动完成文件夹名称。“拥有文件路径(…)”这个文件路径在哪里?你想要一些自动文件编辑脚本吗?这些路径是否在要处理的路径列表中?多了解一些信息会有帮助。@jDo路径被复制到剪贴板。有时也会将文件从finder(mac)拖到终端。@apadana Cool。我认为陈列维的解决方案看起来不错。在复制/粘贴文件名或将其拖动到窗口之前,确实需要输入命令。如果有某种方法可以评估当前在命令行上写入的内容(不按enter键),并且可以绑定到键盘快捷方式,那该多好。嗯…取决于你使用的shell,但是在Ubuntu上的bash中,按下
      选项卡
      会自动完成文件夹名。“拥有文件路径(…)”这个文件路径在哪里?你想要一些自动文件编辑脚本吗?这些路径是否在要处理的路径列表中?多了解一些信息会有帮助。@jDo路径被复制到剪贴板。有时也会将文件从finder(mac)拖到终端。@apadana Cool。我认为陈列维的解决方案看起来不错。在复制/粘贴文件名或将其拖动到窗口之前,确实需要输入命令。如果有某种方法可以评估当前在命令行上写入的内容(不按enter键),并且可以绑定到键盘快捷方式,那该多好。嗯…哇+奖金1英镑!覆盖cd命令很好。谢谢。我注意到如果目录名中有空格,命令就会失败。有什么方法可以增强它,使它能够处理目录名中的空格吗?例如:cd/Volumes/NO\NAME/DCIMI编辑了我的答案,添加了双引号来处理输入中的空格。但是,您应该注意,在调用函数时,需要引用空格(就像您使用
      cd/Volumes/NO\NAME/DCIM
      ),因为否则第一个参数
      $1
      将只分配给空格前的部分,例如
      /Volumes/NO
      ,而
      名称/DCIM
      将分配给
      $2
      。另外,如果单词之间有一个以上的空格,那么使用
      $*
      将不起作用。哇+奖金1英镑!覆盖cd命令很好。谢谢。我注意到如果目录名中有空格,命令就会失败。有什么方法可以增强它,使它能够处理目录名中的空格吗?例如:cd/Volumes/NO\NAME/DCIMI编辑了我的答案,添加了双引号来处理输入中的空格。但是,您应该注意,在调用函数时,需要引用空格(就像您使用
      cd/Volumes/NO\NAME/DCIM
      ),因为否则第一个参数
      $1
      将只分配给空格前的部分,例如
      /Volumes/NO
      ,而
      名称/DCIM
      将分配给
      $2
      。此外,如果单词之间有多个空格,则使用
      $*
      将不起作用。