我正在使用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
部分仅打印文件的名称。$2
text/plain
xargs
调用chmod 644
每个项目
答案2
下面是file --mime-type
Python 脚本中使用的命令。它将您定义的文件类型的权限更改为给定目录中的“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