chmod 仅限某些 mime 类型

chmod 仅限某些 mime 类型

我正在使用file --mime-type *查找选定目录中所有文件的 mime 类型。

其中许多文件不应该是可执行的,并且是.conf或其类型是text/plain。是否有命令组合find可以将所有不可执行的 mime 类型改回644而不是755

答案1

您可以使用类似的东西:

file -F' ' --mime-type * | awk '$2 ~ /text\/plain/{print $1}' | xargs chmod 644

如果文件的 mime-type 为 ,则所有权限均更改为 644。text/plain只需将正文中的部分替换awk为所需的 mime-type 即可。请参阅查看/etc/mime.types所有可用 mime-type。

解释:

  • -F' '标志使文件使用空格作为文件名和结果之间的分隔符。这样后面的awk语句更容易
  • 如果输出的第二个字段()包含,则该awk部分仅打印文件的名称。$2text/plain
  • xargs调用chmod 644每个项目

答案2

下面是file --mime-typePython 脚本中使用的命令。它将您定义的文件类型的权限更改为给定目录中的“new_permissions”(递归)。

#!/usr/bin/env python3

import subprocess
import os

directory = '/path/to/files'
m_subject = ('text/plain', 'another_mimetype')
new_permissions = '644'

for root, dirs, files in os.walk(directory):
    for file in files:
        check_mtype = 'file --mime-type '+'"'+root+'/'+file+'"'
        mtype = subprocess.check_output(
            ['/bin/bash', '-c', check_mtype]).decode('utf-8').strip().split(' ')[-1]
        if mtype in m_subject:
            set_permissions = 'chmod '+str(new_permissions)+' '+root+'/'+file
            subprocess.Popen(['/bin/bash', '-c', set_permissions])
            print('permission set to '+new_permissions+' '+root+'/'+file)

将脚本复制到一个空文件中,在脚本的头部部分,设置目录、要更改的 mime 类型和新的权限,将其保存为change_types.py

通过命令运行:

python3 /path/to/change_types.py

相关内容