UAd*_*ter 6 bash ls cd-command
我想进入由ls命令重新调整的每个目录并执行脚本。
我试过这个(和许多其他的东西),但它就是行不通
ls | awk '{print $1" && pwd"}' | xargs cd
Run Code Online (Sandbox Code Playgroud)
没有for循环怎么办?
Oli*_*Oli 18
find . -type d -exec bash -c 'cd "$0" && pwd' {} \;
Run Code Online (Sandbox Code Playgroud)
交换pwd你的脚本。而.根目录名,如果不是“当前”目录。
bash -c "..."由于工作方式,您必须包装 exec 子句-exec。cd不存在于其有限的环境中,但正如您通过运行上述命令所看到的,当您引入 bash 来完成这项工作时,一切都按预期运行。
编辑:我不确定为什么 2011 Oli 没有想到,-execdir但这可能是一个更快的解决方案:
find . -type d -execdir pwd \;
Run Code Online (Sandbox Code Playgroud)
如果可以,请find按照其他答案中的建议使用,xargs几乎总是要避免的。
但是,如果您仍想使用xargs,则可能的替代方法如下:
printf '%s\0' */ | xargs -0 -L1 bash -c 'cd -- "$1" && pwd' _
Run Code Online (Sandbox Code Playgroud)
一些注意事项:
*/ 由于尾部斜杠,扩展到当前文件夹中的目录列表
printfwith \0(null byte) 为每一行分隔一个元素
选择-L1以xargs使得它一旦对每个输入行都执行和选项-0使得输入的空字节分开:文件名可以包含任何字符,该命令不破!
bash删除双引号并将其作为单个参数传递给内联脚本,但cd应再次放置双引号以将其解释为单个字符串;using--使cd命令对以连字符开头的文件名具有鲁棒性
为了避免作为参数的奇怪使用$0,通常放置第一个虚拟参数_