代码作业:
#!/bin/bash# 清空目录函数
safe_clear_dir() {local dir="$1"local name="$2"if [ -d "$dir" ]; thenwhile true; doread -p "检测到 $name 目录已存在,请选择操作:
1) 清空目录内容
2) 保留目录内容
请输入选项数字: " choicecase $choice in1)echo "正在清空 $name 目录..."shopt -s dotglobrm -rf "${dir:?}"/* 2>/dev/nullshopt -u dotglobreturn 0;;2)echo "保留现有 $name 目录内容"return 0;;*)echo "无效输入,请重新选择";;esacdoneelsemkdir -p "$dir"echo "已创建 $name 目录"fi
}# 处理目标目录
safe_clear_dir "$HOME/file_dir" "文件存储"
safe_clear_dir "$HOME/dir_dir" "目录存储"# 获取并验证输入路径
while true; doread -p "请输入要处理的路径: " input_pathpath=$(realpath "$input_path" 2>/dev/null)if [ -z "$path" ]; thenecho "错误:路径不能为空!"continuefiif [ ! -e "$path" ]; thenecho "错误:路径不存在!"continuefiif [ ! -d "$path" ]; thenecho "错误:必须输入目录路径!"continuefibreak
done# 初始化计数器
count_file=0
count_dir=0# 文件拷贝操作
process_files() {echo "正在处理普通文件..."while IFS= read -r -d '' file; docp -f "$file" "$HOME/file_dir/"((count_file++))done < <(find "$path" -maxdepth 1 -mindepth 1 -type f -print0 2>/dev/null)echo "正在处理目录文件..."while IFS= read -r -d '' dir; docp -r "$dir" "$HOME/dir_dir/"((count_dir++))done < <(find "$path" -maxdepth 1 -mindepth 1 -type d -print0 2>/dev/null)
}
if process_files;thenecho "操作完成,统计结果:"echo "成功拷贝普通文件: $count_file 个"echo "成功拷贝目录文件: $count_dir 个"echo "文件存储位置: $HOME/file_dir"echo "目录存储位置: $HOME/dir_dir"
fi
创建目录:
处理文件:
删除文件:
文件已清空
删除文件夹:
功能完成。
思维导图: