2016-12-03 22 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上下文中的解釋。

相關問題