如何使批处理过滤的脚本可执行



我只是(递归)搜索文件夹中的所有shell脚本:

$ find * | ag ".shb"

现在如何使它们可执行,例如

$ (lambda file_list: chmod +x file_list) (find * | ag ".shb")

对不起这个怪异的python/shell伪代码,我不知道另一种简洁的方式。

检查命令替换。

将命令嵌入回声中,使其成为另一个命令的参数:

$ chmod +x `find * | ag ".shb"`

只需使用find-exec选项:

find -type f -name '*.sh' -exec chmod +x {} +

chmod命令是通过在末尾附加每个选定的文件名来构建的:chmod +x f1.sh f2.sh ...{}替换为正在处理的当前文件名。参见man find

关于您的当前命令

您的当前命令不正确,主要是因为您隐式将当前目录中的所有所有节点传递给find,因为星号(*)已将其扩展到当前文件中的所有文件目录:find file1 file2 dir1 dir2 ...。显然,不是很有效地找到使用.sh扩展名的所有文件。

第二个问题是使用ag工具,因为find非常能够按模式搜索文件名。例如,请阅读有关-name-path-regex选项的信息。为了找到所有使用.sh扩展名的文件,只需将'*.sh'模式传递给-name选项(就find而言,"测试")。注意,应逃脱该模式以防止在外壳上的解释。

最新更新