[問題] 關於bash指令

看板Linux作者時間9年前 (2016/05/03 22:54), 編輯推噓2(2017)
留言19則, 5人參與, 最新討論串1/2 (看更多)
在網路上有看到一個方法可以把某個目錄下所有資料夾都變成群組可執行 指令如下 sudo chmod g+x $(find ./ -type d) 但我執行時會出現一些怪怪的訊息, 例如一些資料夾他說根本找不到 另問一下這到底是什麼原理? 他是執行了很多chmod指令還是一個chmod指令後面帶了很長的參數? 如果是後者會不會因為太長而有部份失敗@@" -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 106.1.226.184 ※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1462287244.A.C47.html

05/03 22:54, , 1F
這個就後面加了一長串的參數
05/03 22:54, 1F

05/03 22:55, , 2F
find ./ -type d -exec sudo chmod g+x {} \;
05/03 22:55, 2F

05/03 22:55, , 3F
這種的就是執行很多次
05/03 22:55, 3F

05/03 23:00, , 4F
可能是目錄名有空白. 太長應該是 arguments too long 之類.
05/03 23:00, 4F

05/03 23:02, , 5F
for dir in $(find . -type d); do chmod g+x $dir; done
05/03 23:02, 5F

05/03 23:02, , 6F
這種也是 不過目錄名稱有空白會有問題
05/03 23:02, 6F

05/03 23:03, , 7F
剛剛試了一下 原 PO 那條也會有空白的問題
05/03 23:03, 7F

05/03 23:05, , 8F
有看過find ./ -type d -exec sudo chmod g+x {} \;
05/03 23:05, 8F

05/03 23:05, , 9F
但無法理解 {} \ 是什麼意思?
05/03 23:05, 9F

05/03 23:07, , 10F
那是 find 的參數格式
05/03 23:07, 10F

05/03 23:09, , 11F
他會察看指定目錄下的所有檔案
05/03 23:09, 11F

05/03 23:09, , 12F
當符合條件時會執行 exec 後面指定的指令
05/03 23:09, 12F

05/03 23:09, , 13F
因為 ; 在大部份 shell 裡有意義所以要 escape
05/03 23:09, 13F

05/03 23:10, , 14F
{}代表find找到的檔案,\;是"sudo chmod...;"的那個";"
05/03 23:10, 14F

05/03 23:10, , 15F
{} 則代表這邊要置換成目前遍歷到且符合條件的檔名
05/03 23:10, 15F

05/03 23:11, , 16F
理解=口= 感謝 那這個沒有空白問題囉@@
05/03 23:11, 16F

05/03 23:14, , 17F
我試過是沒有
05/03 23:14, 17F

05/03 23:17, , 18F
嗯... 這條好像也沒錯誤訊息了也~ 感謝
05/03 23:17, 18F

05/04 02:37, , 19F
find的exec會自動上""啦 原PO的那條要另外包上""才行
05/04 02:37, 19F
文章代碼(AID): #1NABkCn7 (Linux)
討論串 (同標題文章)
文章代碼(AID): #1NABkCn7 (Linux)