查找具有特定 mime 类型的所有文件

查找具有特定 mime 类型的所有文件

我将大量 (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 {} +

要对匹配的文件执行某些操作(例如chmodchown),请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
现在,阅读已标记的文本部分。
np将使显示跳转到“下一个”或“上一个”实例。


尝试解释:

假设您仍然有可用的原始文件,您可以使用此参数“cp”(复制)以及原始参数来恢复所复制文件的文件属性。

  
       --attributes-only
              不复制文件数据,只复制属性

如果我没有完全弄错的话,您将通过此更正所有提及的文件的设置。

相关内容