保存时间:2026/4/8 08:39:16
/usr/local 目录下从 cmake-4.2.3-linux-x86_64 拷贝过去的文件,然后将这些文件从 /usr/local 中彻底删除,避免手动逐个删除的麻烦。/usr/local 下对应的文件#!/bin/bash
# ===================== 配置区 =====================
# 你的cmake源文件目录(请确认这个路径正确)
SOURCE_DIR="/home/nick/Downloads/cmake-4.2.3-linux-x86_64"
# 目标删除目录(cmake安装的目录)
TARGET_DIR="/usr/local"
# ===================== 配置区结束 =====================
# 安全检查:确认源目录存在
if [ ! -d "$SOURCE_DIR" ]; then
echo "错误:源目录 $SOURCE_DIR 不存在!"
exit 1
fi
# 安全检查:确认目标目录存在
if [ ! -d "$TARGET_DIR" ]; then
echo "错误:目标目录 $TARGET_DIR 不存在!"
exit 1
fi
# 第一步:检查模式 - 列出所有待删除的文件
echo "========================================"
echo "开始检查待删除的文件(仅列出,不删除)..."
echo "源目录: $SOURCE_DIR"
echo "目标目录: $TARGET_DIR"
echo "========================================"
# 遍历源目录下的所有文件(包括子目录)
find "$SOURCE_DIR" -type f -print0 | while IFS= read -r -d '' src_file; do
# 计算相对路径
rel_path="${src_file#$SOURCE_DIR/}"
# 拼接目标路径
target_file="$TARGET_DIR/$rel_path"
# 如果目标文件存在,记录下来
if [ -f "$target_file" ]; then
echo "待删除文件: $target_file"
# 保存到临时文件,供后续删除使用
echo "$target_file" >> /tmp/cmake_files_to_delete.tmp
fi
done
# 遍历源目录下的空目录(最后删除)
find "$SOURCE_DIR" -type d -print0 | while IFS= read -r -d '' src_dir; do
rel_path="${src_dir#$SOURCE_DIR/}"
target_dir="$TARGET_DIR/$rel_path"
if [ -d "$target_dir" ]; then
echo "待删除目录: $target_dir"
echo "$target_dir" >> /tmp/cmake_dirs_to_delete.tmp
fi
done
# 检查是否有需要删除的文件
if [ ! -f /tmp/cmake_files_to_delete.tmp ] || [ ! -s /tmp/cmake_files_to_delete.tmp ]; then
echo "========================================"
echo "未找到任何需要删除的cmake文件!"
rm -f /tmp/cmake_files_to_delete.tmp /tmp/cmake_dirs_to_delete.tmp
exit 0
fi
# 第二步:确认是否执行删除
echo "========================================"
echo "检查完成!共找到 $(wc -l < /tmp/cmake_files_to_delete.tmp) 个待删除文件"
read -p "是否确认删除这些文件?(y/N): " confirm
if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then
echo "取消删除操作!"
rm -f /tmp/cmake_files_to_delete.tmp /tmp/cmake_dirs_to_delete.tmp
exit 0
fi
# 第三步:执行删除
echo "========================================"
echo "开始删除文件..."
echo "========================================"
# 删除文件
while IFS= read -r file; do
if [ -f "$file" ]; then
echo "删除文件: $file"
sudo rm -f "$file"
fi
done < /tmp/cmake_files_to_delete.tmp
# 删除空目录(逆序删除,先删子目录,再删父目录)
if [ -f /tmp/cmake_dirs_to_delete.tmp ]; then
tac /tmp/cmake_dirs_to_delete.tmp | while IFS= read -r dir; do
if [ -d "$dir" ]; then
# 检查目录是否为空
if [ -z "$(ls -A "$dir")" ]; then
echo "删除空目录: $dir"
sudo rmdir "$dir"
fi
fi
done
fi
# 清理临时文件
rm -f /tmp/cmake_files_to_delete.tmp /tmp/cmake_dirs_to_delete.tmp
echo "========================================"
echo "cmake文件删除完成!"
echo "你可以执行以下命令验证cmake是否已删除:"
echo " cmake --version"
echo "如果提示 'cmake: command not found' 则说明删除成功"
echo "========================================"
uninstall_cmake.shchmod +x uninstall_cmake.sh
./uninstall_cmake.sh
y 即可开始删除(需要 sudo 权限,会提示输入密码)/usr/local 下的文件,不会误删其他文件/usr/local 下的文件通常需要 root 权限,脚本中使用 sudo,执行时会提示输入密码find 命令遍历源目录,匹配 /usr/local 下对应的文件并列出,确认无误后再删除cmake --version 验证是否删除成功#!/bin/bash
# 极简版 CMake 删除脚本
# 逐个删除 /usr/local 下的 cmake 相关目录
# 定义要删除的目录列表(对应你解压包中的目录)
dirs_to_delete=(
"/usr/local/bin/cmake*" # cmake 主程序及相关工具
"/usr/local/doc/cmake" # cmake 文档
"/usr/local/man/man1/cmake*" # cmake 手册页
"/usr/local/share/cmake" # cmake 配置文件
)
# 确认操作提示
echo "========================================"
echo "即将删除 /usr/local 下的 CMake 相关文件"
echo "删除列表:"
for dir in "${dirs_to_delete[@]}"; do
echo " - $dir"
done
echo "========================================"
read -p "确认要删除吗?输入 y 继续,其他键取消:" confirm
if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then
echo "操作已取消!"
exit 0
fi
# 逐个删除(需要 sudo 权限)
echo "开始删除..."
# 1. 删除 bin 目录下的 cmake 相关可执行文件
echo "1. 删除 /usr/local/bin 下的 cmake 程序..."
sudo rm -fv /usr/local/bin/cmake*
# 2. 删除 doc 目录下的 cmake 文档
echo "2. 删除 /usr/local/doc/cmake 目录..."
sudo rm -rfv /usr/local/doc/cmake
# 3. 删除 man 手册页
echo "3. 删除 /usr/local/man/man1 下的 cmake 手册..."
sudo rm -fv /usr/local/man/man1/cmake*
# 4. 删除 share 下的 cmake 配置
echo "4. 删除 /usr/local/share/cmake 目录..."
sudo rm -rfv /usr/local/share/cmake
# 完成提示
echo "========================================"
echo "删除完成!"
echo "验证是否删除干净:执行 cmake --version"
echo "如果提示 'cmake: command not found' 就是删干净了"
simple_uninstall_cmake.shchmod +x simple_uninstall_cmake.sh
./simple_uninstall_cmake.sh
rm -fv:-f 强制删除(不提示),-v 显示删除的文件(能看到删了啥)rm -rfv:-r 递归删除目录(删文件夹必须加)read -p:提示用户输入,确认后才执行删除dirs_to_delete:数组,只是列出来给你看,实际删除是单独写的,更直观# 1. 删除 bin 下的 cmake 程序
sudo rm -fv /usr/local/bin/cmake*
# 2. 删除 doc 文档
sudo rm -rfv /usr/local/doc/cmake
# 3. 删除 man 手册
sudo rm -fv /usr/local/man/man1/cmake*
# 4. 删除 share 配置
sudo rm -rfv /usr/local/share/cmake
-v(显示详情),你能清楚看到删了哪些文件,心里有底y 确认,避免误操作,删除后用 cmake --version 验证即可#!/bin/bash
# 你的 cmake 源目录(解压出来那个)
SRC="/home/nick/Downloads/cmake-4.2.3-linux-x86_64"
# 目标安装目录
DEST="/usr/local"
# 递归遍历 SRC 里的所有文件
find "$SRC" -type f | while read -r file; do
# 拿到相对路径
rel="${file#$SRC/}"
# 目标路径
target="$DEST/$rel"
# 只删【真正存在的普通文件】,不碰链接、目录、不存在的
if [ -f "$target" ]; then
echo "删除:$target"
sudo rm -f "$target"
fi
done
echo "✅ 所有 cmake 文件已精准删除完成"
clean_cmake.shchmod +x clean_cmake.sh
./clean_cmake.sh
sudo rm -f "$target"
# sudo rm -f "$target"
else 分支,并优化整体脚本的提示信息,保持语法极简且易读。#!/bin/bash
# 你的 cmake 源目录(解压出来的原始目录)
SRC="/home/nick/Downloads/cmake-4.2.3-linux-x86_64"
# 目标安装目录(要删除文件的目录)
DEST="/usr/local"
# 安全检查:确认源目录存在
if [ ! -d "$SRC" ]; then
echo "❌ 错误:源目录 $SRC 不存在,请检查路径!"
exit 1
fi
# 递归遍历 SRC 里的所有文件(只找普通文件,排除目录/链接)
echo "🔍 开始遍历源目录并匹配目标文件..."
echo "========================================"
find "$SRC" -type f | while read -r file; do
# 提取源文件相对路径(去掉SRC前缀)
rel="${file#$SRC/}"
# 拼接目标文件完整路径
target="$DEST/$rel"
# 判断目标文件是否存在(仅匹配普通文件,不处理链接/目录)
if [ -f "$target" ]; then
echo "✅ 找到匹配文件,准备删除:$target"
# 取消下面注释执行真正删除(先预览确认后再打开)
# sudo rm -f "$target"
else
# 分情况提示,更清晰
if [ -L "$target" ]; then
echo "⚠️ 目标路径存在但不是普通文件(是软链接):$target"
elif [ -d "$target" ]; then
echo "⚠️ 目标路径存在但不是普通文件(是目录):$target"
else
echo "❌ 目标文件不存在:$target"
fi
fi
done
echo "========================================"
echo "📌 遍历完成!若要执行删除,请取消脚本中 'sudo rm -f' 行的注释后重新运行。"
if [ -f "$target" ]; then
# 目标是普通文件且存在 → 准备删除
else
# 目标不存在 / 不是普通文件 → 分情况提示
fi
-L "$target":检查是否是软链接(你担心的情况,单独提示)-d "$target":检查是否是目录(避免误判)sudo rm -f 是注释状态,脚本只会打印所有文件的匹配状态:# sudo rm -f "$target" 前的注释,重新运行脚本,即可精准删除所有匹配的普通文件。else 分支做了细化提示,区分「软链接」「目录」「纯不存在」三种情况,解决你对软链接的顾虑;