我只是(递归)搜索文件夹中的所有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
而言,"测试")。注意,应逃脱该模式以防止在外壳上的解释。