代碼作業:
#!/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
創建目錄:
處理文件:
刪除文件:
文件已清空
刪除文件夾:
功能完成。
思維導圖: