MST
星途 面试题库

面试题:Bash复杂目录结构与文件操作及权限管理

给定一个复杂的目录结构,根目录为/project,其中包含多级子目录和大量文件。要求编写一个Bash脚本,实现以下功能:1. 在/project目录下查找所有文件所有者不是当前用户且文件大小超过10MB的文件,并将其路径输出到/project/large_non_owned_files.txt文件中。2. 对这些文件所在的目录设置权限,使得当前用户对这些目录拥有读写执行权限,其他用户只有读和执行权限,但要确保原有的所有者权限不变。3. 完成上述操作后,将所有权限变更的目录路径记录到/project/permissions_changed_dirs.txt文件中。
25.8万 热度难度
编程语言Bash

知识考点

AI 面试

面试题答案

一键面试
#!/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

上述脚本完成了以下操作:

  1. 使用find命令查找满足条件的文件,并输出到/project/large_non_owned_files.txt文件中。
  2. 遍历找到的文件路径,获取其所在目录,并设置相应权限,确保原所有者权限不变,当前用户有读写执行权限,其他用户有读和执行权限。
  3. 将所有权限变更的目录路径记录到/project/permissions_changed_dirs.txt文件中。