我很難解決這個問題。
編寫一個shell腳本來檢查目前目錄下所有檔案的可執行權限。如果該檔案沒有使用者可執行權限,則將其設定為使用者可執行權限。
我在想是否循環當前目錄中的所有文件並將輸出寫入文字文件。然後讀取每一行的第四個字元並檢查它是“x”還是“-”
答案1
您的想法似乎合法,但不必要地龐大和複雜,而是您可以使用這個:
#!/bin/bash
for file in *; do
[[ -x $file ]] || chmod u+x "$file"
done
這將讀取
*
目前目錄中的所有檔案 ( )然後它將檢查運行腳本的用戶是否可以執行該文件 (
[[ -x $file ]]
)如果不是 (
||
),它將使該文件對使用者可執行 (chmod u+x "$file"
)。
預設*
不會匹配隱藏文件,要匹配隱藏文件還需添加以下行
shopt -s dotglob
在舍邦線之後。
如果您只想搜尋和操作常規文件:
#!/bin/bash
for file in *; do
if [[ -f $file ]]; then
[[ -x $file ]] || chmod u+x "$file"
fi
done
答案2
這是一個簡單的find
指令chmod
:
find . -type f ! -perm -u+x -exec chmod u+x {} \;
或僅適用於目前資料夾:
find . -maxdepth 1 -type f ! -perm -u+x -exec chmod u+x {} \;
解釋
.
在目前資料夾中開始搜尋
-maxdepth
不遞迴
-type f
只有文件,沒有資料夾
! -perm -u+x
僅檔案擁有者沒有可執行標誌的文件
-exec chmod u+x {}
為文件所有者設定可執行標誌
答案3
我希望您提到它是更大的自動化項目的一部分還是只是您想做的事情。
您可以簡單地在目錄中執行以下操作:
chmod u+x *
這會將可執行狀態新增至資料夾內的所有檔案“你的用戶”。您可以嘗試新增為“每個人“ 經過
chmod a+x *
請注意,您的使用者應該有權更改該特定資料夾內的文件。這意味著你應該有'寫' 允許。否則,你將無法改變任何事情。如果您的使用者是管理員,您可以使用以下sudo
命令呼叫它:
sudo chmod a+x *
如果檔案已經具有可執行狀態,則再次賦予它狀態不會有任何壞處。當然,正如我所說,除非您想要使用狀態變更用於其他目的(例如報告)的所有文件的名稱。對於這樣的目的來說,heemayl 的腳本是一件好事。
新增自 Mostafa Najafiyazdi 評論
[..]如果他不想觸及沒有可執行權限的資料夾的權限,他不應該使用chmod u+x *
[..]