如何为 find 返回的每个目录生成一个交互式 shell?

Bar*_*nes 0 find

给定基本find命令:

find . -type d
Run Code Online (Sandbox Code Playgroud)

对于返回的每个目录,我想生成一个以该目录作为当前目录的交互式 shell。

Bar*_*nes 5

解决方案

这有效:

find . -execdir sh \;
Run Code Online (Sandbox Code Playgroud)

演示

# Create some sample directories
$ for i in {1..4}; do mkdir -p "/tmp/example/$i/foo" ; done

# spawn
$ find -s /tmp/example -name foo -execdir sh \;
sh-3.2$ pwd
/private/tmp/example/1
sh-3.2$ exit
sh-3.2$ pwd
/private/tmp/example/2
sh-3.2$ exit
sh-3.2$ pwd
/private/tmp/example/3
sh-3.2$ exit
sh-3.2$ pwd
/private/tmp/example/4
sh-3.2$ exit
$
Run Code Online (Sandbox Code Playgroud)

这个怎么运作

相关联机帮助页信息和/或其他信息:

-s: 导致 find 按字典顺序遍历文件层次结构,即每个目录中的字母顺序。这对解决方案并不重要,但它使外壳的顺序是可预测的。

/tmp/example: 路径参数 – find 实用程序为列出的每个路径递归地降低目录树。

-name pattern: 如果正在检查的路径名的最后一个部分与模式匹配,则匹配文件。特殊的 shell 模式匹配字符 ( ['',]'', *'', and?'') 可以用作模式的一部分。

-execdir utility \;: -execdir primary 与 -exec primary 相同,不同之处在于实用程序将从保存当前文件的目录中执行。

shsh在此上下文中运行会从保存当前文件的目录中生成一个交互式 shell。