我正在寻找一种方法,可以找到一个我知道是唯一的文件,然后进入包含该文件的目录。大致上应该像这样:
或者:
find . -name 'Subscription.java' | xargs cd
或者:
find . -name 'Subscription.java' -exec cd {} \;
我知道这个命令行不会生效,因为它试图使用整个绝对路径(包括文件名)去执行 cd
命令,并且 xargs
无法执行内置的 shell 命令,但是你可以理解我想要实现的目标。
function fcd()
{
cd $(find . -name $1 | xargs dirname)
} - bergyman
cd $(dirname $(find . -name $1 | sed 1q))
处理不唯一的名称,会进入第一个找到的名称并且如果未找到该名称,则返回主目录。 它还演示了嵌套使用$(...)
的方法,这就是为什么该符号比反引号更受欢迎的原因。您可能更喜欢使用 'sed '2,$d'
' ,因为它避免了 SIGPIPE 错误干扰find
。 - Jonathan Lefflerwcd() { cd $(dirname $(which $1)); }
或者wcd() { cd $(dirname $(type -p $1)); }
或者wcd() { local dir=$(type -P $1); [[ -z $dir ]] && dir='.'; cd "${dir%/*}"; }
。最后一种方法不会产生任何外部程序,并且如果找不到该名称,则不会更改目录。 - Dennis Williamson