一个Shell脚本,在一个步骤中以文件夹名称为参数查找并cd到文件夹中



我试着用Bash,写一个单行

find ~ -name Music -type d -exec cd '{}' ;

这一个使用find和exec,但我得到了错误:

find:"cd":没有这样的文件或目录

第二次尝试XARGS、

find ~ -name Music  -type d -print0 | xargs -0 cd  

现在我再次尝试写一个脚本。sh

pathe=$(find ~ -name $1 -type d | head -n 1 )
cd $pathe

并尝试执行脚本./1.sh Music,但没有成功。

到目前为止,唯一有效的方法是直接在终端中键入以下命令

cd `find ~ -iname books -type d | head -n 1`

有人能帮我指出错误吗?我正试着写一行字,稍后再取别名。

注意:该脚本甚至不适用于只有一个结果的find result和没有空格的result。

我将konsole与bash版本4.2.45(2)一起使用。

您必须在当前shell中运行cd正如您所看到的,在另一个shell中运行它是行不通的。创建一个函数。示例:

mycd (){
  cd "${1}foo"
}

前3个实现存在一些问题:

  1. -exec选项需要一个可执行的二进制文件。cd是一个shell内置文件,而不是二进制文件,如/bin/bash
  2. xargs也采用可执行二进制文件
  3. 代码正确。但是,由于您创建了一个.sh文件,&在subshell中执行。因此,它创建了一个子进程(bash),找到了目录,cd到那个目录,&已退出。您当前的外壳不受影响

有两个选项可以cd到找到的目录:

1.使用子shell更改目录:

find ~ -name Music -type d -exec bash -c "cd '{}'; exec bash" ;

这启动了一个bash shell,&在该shell中,它将更改为所需的目录
注意,您所做的任何更改都不会反映在父shell中。

2.使用bash函数:

findAndCd(){
    pathe=$(find ~ -name $1 -type d | head -n 1 )
    cd $pathe
}
Usage:
findAndCd Music

您可以选择使用pushd而不是cd。就我个人而言,除了cd修改我的CWD&OLDCWD,而没有一种简单的方法来恢复这两者。

相关内容

最新更新