gpt4 book ai didi

bash - 在所有直接子目录中执行命令

转载 作者:行者123 更新时间:2023-11-29 08:56:18 25 4
gpt4 key购买 nike

我正在尝试添加一个 shell 函数 (zsh) mexec 以在所有直接子目录中执行相同的命令,例如具有以下结构

~
-- folder1
-- folder2

mexec pwd 例如会显示

/home/me/folder1
/home/me/folder2

我正在使用 find 来提取直接子目录。问题是让传入的命令执行。这是我的第一个函数定义:

mexec() {
find . -mindepth 1 -maxdepth 1 -type d | xargs -I'{}' \
/bin/zsh -c "cd {} && $@;";
}

仅执行命令本身但不传递参数,即 mexec ls -al 的行为与 ls

完全相同

将第二行更改为 /bin/zsh -c "(cd {} && $@);"mexec 仅适用于 mexec ls 但对 mexec ls -al 显示此错误:

zsh:1: parse error near `ls'

使用 find 走 exec 路线

find . -mindepth 1 -maxdepth 1 -type d -exec /bin/zsh -c "(cd {} && $@)" \;

给了我同样的东西,这让我相信我将参数传递给 zsh 的方式存在问题。如果我使用 bash,这似乎也是一个问题:显示的错误是:

-a);: -c: line 1: syntax error: unexpected end of file

实现此目标的好方法是什么?

最佳答案

你能尝试使用这个简单的循环吗?它在一个深度的所有子目录中循环并在其上执行命令,

for d in ./*/ ; do (cd "$d" && ls -al); done

(cmd1 && cmd2) 打开一个子 shell 来运行命令。由于它是一个子 shell,父 shell(您从中运行此命令的 shell)保留其当前文件夹和其他环境变量。

将它包装在适当的 zsh 脚本中的函数中作为

#!/bin/zsh

function runCommand() {
for d in ./*/ ; do /bin/zsh -c "(cd "$d" && "$@")"; done
}

runCommand "ls -al"

应该适合你。

关于bash - 在所有直接子目录中执行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41553325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com