我很难解决这个问题。
编写一个 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
在shebang行之后。
如果您只想搜索和操作常规文件:
#!/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 *
[...]