我将大量 (Android SDK) 文件从共享目录复制到我的系统。现在,所有 MIME 类型为application/x-shellscript
或的文件application/x-executable
似乎都不可执行。例如,当我尝试运行时,mksdcard
出现此错误:
$ ./mksdcard
bash: ./mksdcard: Permission denied
我如何才能找到具有这些 MIME 类型的文件?然后我如何更改这些权限?
笔记:
1- 当我find <path> -type f -executable
以 root 用户身份尝试时,它会显示所有文件(甚至 .PNG 文件),而当我以标准用户身份尝试时,它什么都不显示。我不知道如何根据文件的 MIME 类型来过滤文件。
2- 共享目录(源)当前无法访问。
答案1
该find
命令不会测试 mimetype 本身,但您可以使用它来执行mimetype
命令和grep
结果。
例如
find path/to/dir/ -type f -exec sh -c '
for f; do
mimetype -b "$f" | grep -Eq "application/(x-shellscript|executable)" &&
printf "%s\n" "$f"
done
' sh {} +
要对匹配的文件执行某些操作(例如chmod
或chown
),请printf
用以下命令替换该命令,例如
find path/to/dir/ -type f -exec sh -c '
for f; do
mimetype -b "$f" | grep -Eq "application/(x-shellscript|executable)" &&
chmod u+x "$f"
done
' sh {} +
我高度建议检查当前的所有权和权限第一的例如ls
find path/to/dir/ -type f -exec sh -c '
for f; do
mimetype -b "$f" | grep -Eq "application/(x-shellscript|executable)" &&
ls -l "$f"
done
' sh {} +
答案2
暗示:
男人 cp
然后按/并输入attr
(“属性”的一部分)并按ENTER。
现在,阅读已标记的文本部分。
按n或p将使显示跳转到“下一个”或“上一个”实例。
尝试解释:
假设您仍然有可用的原始文件,您可以使用此参数“cp”(复制)以及原始参数来恢复所复制文件的文件属性。
--attributes-only 不复制文件数据,只复制属性
如果我没有完全弄错的话,您将通过此更正所有提及的文件的设置。