面试题答案
一键面试#!/bin/bash
# 查找文件所有者不是当前用户且文件大小超过10MB的文件,并输出到large_non_owned_files.txt
find /project -type f -not -user $(whoami) -size +10M -exec echo {} \; > /project/large_non_owned_files.txt
# 存储权限变更的目录路径
permissions_changed_dirs=()
# 读取large_non_owned_files.txt中的文件路径,对其所在目录设置权限
while read -r file_path; do
dir_path=$(dirname "$file_path")
if [ -d "$dir_path" ]; then
original_permissions=$(stat -c "%a" "$dir_path")
new_permissions=$(echo $original_permissions | awk -F '' '{printf "%c%c%c755", substr($0, 1, 1), substr($0, 2, 1), substr($0, 3, 1)}')
chmod $new_permissions "$dir_path"
permissions_changed_dirs+=("$dir_path")
fi
done < /project/large_non_owned_files.txt
# 将权限变更的目录路径记录到permissions_changed_dirs.txt
printf '%s\n' "${permissions_changed_dirs[@]}" > /project/permissions_changed_dirs.txt
上述脚本完成了以下操作:
- 使用
find
命令查找满足条件的文件,并输出到/project/large_non_owned_files.txt
文件中。 - 遍历找到的文件路径,获取其所在目录,并设置相应权限,确保原所有者权限不变,当前用户有读写执行权限,其他用户有读和执行权限。
- 将所有权限变更的目录路径记录到
/project/permissions_changed_dirs.txt
文件中。