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…]
选项卡
会自动完成文件夹名称。“拥有文件路径(…)”这个文件路径在哪里?你想要一些自动文件编辑脚本吗?这些路径是否在要处理的路径列表中?多了解一些信息会有帮助。@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
。此外,如果单词之间有多个空格,则使用$*
将不起作用。