Linux 一个Shell脚本,用于在一个步骤中查找并cd到以文件夹名称为参数的文件夹中
我试着用Bash写一行Linux 一个Shell脚本,用于在一个步骤中查找并cd到以文件夹名称为参数的文件夹中,linux,bash,shell,terminal,Linux,Bash,Shell,Terminal,我试着用Bash写一行 find ~ -name Music -type d -exec cd '{}' \; 这一个使用find和exec,但我发现错误: 查找:`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
find ~ -name Music -type d -exec cd '{}' \;
这一个使用find和exec,但我发现错误:
查找:`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
我正在将konsole与bash版本4.2.45(2)一起使用。您必须在当前shell中运行
cd
。在另一个shell中运行它将不起作用,如您所见。创建一个函数。例如:
mycd (){
cd "${1}foo"
}
您必须在当前shell中运行
cd
。如您所见,在另一个shell中运行它将不起作用。创建一个函数。例如:
mycd (){
cd "${1}foo"
}
前3个实现存在一些问题:
-exec
选项需要一个可执行二进制文件。cd是一个内置的shell,而不是像/bin/bash那样的二进制文件xargs
还接受可执行二进制文件子shell中执行。因此,它创建了一个子进程(bash),找到了目录,将cd放入该目录,并退出。您当前的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,因为没有一种简单的方法来恢复这两个命令。前3个实现存在一些问题:
-exec
选项需要一个可执行二进制文件。cd是一个内置的shell,而不是像/bin/bash那样的二进制文件xargs
还接受可执行二进制文件子shell中执行。因此,它创建了一个子进程(bash),找到了目录,将cd放入该目录,并退出。您当前的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,因为没有一种简单的方法来恢复它们。非常感谢,我尝试了一个函数mycd,但它不适用于xargs或exec。请通过使用mycd函数为我提供一行代码来帮助我。非常感谢,我尝试了使用mycd函数,但它不适用于xargs或exec。请帮助我使用mycd功能为我提供一行代码。感谢向我解释所有这些。非常感谢:)感谢向我解释所有这些。非常感谢:)