我只是搜索(递归)的所有shell脚本文件夹中:如何制作批处理过滤的脚本可执行文件?
$ find * | ag "\.sh\b"
现在我该如何让他们的可执行文件,像
$ (lambda file_list: chmod +x file_list) (find * | ag "\.sh\b")
对不起,这个奇怪的Python /壳牌伪代码,我不知道用另一种方式简洁地传达它。
我只是搜索(递归)的所有shell脚本文件夹中:如何制作批处理过滤的脚本可执行文件?
$ find * | ag "\.sh\b"
现在我该如何让他们的可执行文件,像
$ (lambda file_list: chmod +x file_list) (find * | ag "\.sh\b")
对不起,这个奇怪的Python /壳牌伪代码,我不知道用另一种方式简洁地传达它。
只需使用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
)。请注意,该模式应该被转义以防止在shell上下文中的解释。