MST

星途 面试题库

面试题:Bash下复杂文件类型识别及批量操作

假设有一个目录,里面包含各种类型的文件(普通文件、目录、符号链接等)。请编写一个Bash脚本,能够遍历该目录及其子目录,识别出所有的可执行文件(普通文件且有执行权限),并将这些可执行文件的路径记录到一个日志文件中,同时要处理好遍历过程中可能遇到的权限问题及符号链接的特殊情况。
26.6万 热度难度
编程语言Bash

知识考点

AI 面试

面试题答案

一键面试
#!/bin/bash

log_file="executable_files.log"

# 初始化日志文件
> "$log_file"

# 遍历目录及其子目录
find . -type f -executable 2>/dev/null | while read -r file; do
    # 处理符号链接
    real_file=$(readlink -f "$file")
    echo "$real_file" >> "$log_file"
done

上述脚本解释:

  1. #!/bin/bash:指定脚本的解释器为Bash。
  2. log_file="executable_files.log":定义日志文件名。
  3. > "$log_file":初始化日志文件,清空文件内容。
  4. find . -type f -executable 2>/dev/null:查找当前目录(.)及其子目录下所有类型为普通文件(-type f)且具有可执行权限(-executable)的文件,同时将标准错误输出(权限问题等错误信息)重定向到空设备(2>/dev/null)以忽略权限问题导致的错误。
  5. while read -r file; do:对找到的每个文件进行处理。
  6. real_file=$(readlink -f "$file"):如果文件是符号链接,获取其指向的真实文件路径。
  7. echo "$real_file" >> "$log_file":将可执行文件的真实路径写入日志文件。