2016-12-03 56 views
0

我只是搜索(递归)的所有shell脚本文件夹中:如何制作批处理过滤的脚本可执行文件?

$ find * | ag "\.sh\b" 

现在我该如何让他们的可执行文件,像

$ (lambda file_list: chmod +x file_list) (find * | ag "\.sh\b") 

对不起,这个奇怪的Python /壳牌伪代码,我不知道用另一种方式简洁地传达它。

回答

0

检查Command Substitution

嵌入反引号中的命令,使之成为另一个命令的参数:

$ chmod +x `find * | ag "\.sh\b"` 
0

只需使用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上下文中的解释。

相关问题